关于shell:Bash条件变量与目录的结构

Structure of Bash conditional - variable versus directory

我有一个关于将在bash命令行中使用的条件语句结构的问题。

这个问题显示:

1
if [ -z"${VAR}" ]; then echo"VAR is unset or set to the empty string"

这里,似乎只有当变量VAR不存在时才调用then。从这里确认。

但是,对于目录,此问题显示:

1
if [ -d $directory_name ]; then echo"Directory already exists"

这里,似乎只有当变量directory_name确实存在时,才会调用then。从这里确认(向下滚动到-d)。

我的问题:我最近试图检查一个变量是否存在。当我试图对目录应用相同的逻辑时,我惊讶地发现它不能做到。以下是我的尝试:

1
2
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

问题:这是非常令人困惑的,因为看起来条件的相同结构不能用于目录和变量。这是真的吗?如果是这样,那么这个差异是否在某个地方记录下来了?


下面是这些命令的正确使用,可以通过运行帮助测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if [ -z"$j" ]
then
  echo '$j is empty'
fi

if [ -n"$j" ]
then
  echo '$j is not empty'
fi

if [ -d /mnt/iso ]
then
  echo '/mnt/iso is a directory'
fi