1
我有一个关于要在bash命令行中使用的条件语句的结构的问题。Bash条件变量的结构 - 变量与目录
if [ -z "${VAR}" ]; then echo "VAR is unset or set to the empty string"
这里,看来该then
当变量VAR
不存在只被调用。这从here确认。
然而,对于目录,this question显示:
if [ -d $directory_name ]; then echo "Directory already exists"
在这里,它会出现在then
当变量directory_name
确实存在只被调用。这从here确认(向下滚动到-d
)。
我的问题: 我最近试图检查一下是否是variable existed or not。当我试图将相同的逻辑应用于目录时,我感到惊讶的是它无法完成。这里是我的尝试:
dir_full_path='/mnt/iso'
if [ -d $dir_full_path ]; then echo 'Directory does not exist'; else echo 'Does exist'; fi
当我跑这两条线,目录路径/mnt/iso
没有不存在。所以我预计有条件返回Directory does not exist
。相反,它做了相反的事情,它返回Does exist
。
问: 这是相当混乱,因为它似乎是不能被用于目录和变量的条件相同的结构。这是真的?如果是这样,那么这种差异记录在某处?
我看不出与2号线的方法的任何问题,但它是安全的将变量括在双引号中(这样,如果变量的计算结果为空,就不会陷入语法问题),因此:if [-d“$ dir_full_path”];那么... – codeforester
'-d'测试它的参数是否是一个目录。 '-z'测试它的参数是否为空字符串。 – Barmar
你似乎已经回答了你自己的问题:**只有当变量directory_name存在时,才会调用then。**为什么你期望它对'-d $ dir_full_path'有不同的作用? – Barmar