shell cd“$dir_name”&& rm *,如果dir_name为空,为什么会执行rm *?

wydwbb8l  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(134)

我正在阅读Linux命令行手册,偶然发现了这一节。
它是关于命令的:

cd "$dir_name" && rm *

然后说了下面的话:
这是更好的,但仍然有可能是变量dir_name未设置或为空,这将导致用户主目录中的文件被删除。
这怎么可能呢?如果dir_name为空,那么语句应该计算为非零值,即false,然后不应该执行第二个命令rm,那么为什么要执行它?

6za6bjd0

6za6bjd01#

你错误地认为cd应该返回一个非零的退出码。很容易验证:

ljm@verlaine[~]$ cd /tmp
ljm@verlaine[/tmp]$ if cd "" ; then echo yes; fi
/home/ljm
yes
ljm@verlaine[~]$

这证明了cd ""有一个零退出码和cd-s到你的主目录。
请注意,可能.bashrc包含

export CDPATH='~'

相关问题