Bash条件变量与目录的结构

Bash条件变量与目录的结构,bash,shell,conditional,Bash,Shell,Conditional,我对bash命令行中使用的条件语句的结构有一个疑问 显示: 这里,似乎只有当变量VAR不存在时才调用then。这一点已从中得到证实 但是,对于目录,显示: 在这里,似乎只有当变量目录名不存在时才调用then。这可从(向下滚动至-d)确认 我的问题: 我最近试着检查是否有问题。当我尝试将相同的逻辑应用于目录时,我惊讶地发现它无法实现。以下是我尝试过的: dir_full_path='/mnt/iso' if [ -d $dir_full_path ]; then echo 'Directory d

我对bash命令行中使用的条件语句的结构有一个疑问

显示:

这里,似乎只有当变量
VAR
不存在时才调用
then
。这一点已从中得到证实

但是,对于目录,显示:

在这里,似乎只有当变量
目录名
不存在时才调用
then
。这可从(向下滚动至
-d
)确认

我的问题: 我最近试着检查是否有问题。当我尝试将相同的逻辑应用于目录时,我惊讶地发现它无法实现。以下是我尝试过的:

dir_full_path='/mnt/iso'
if [ -d $dir_full_path ]; then echo 'Directory does not exist'; else echo 'Does exist'; fi
当我运行这两行时,目录路径
/mnt/iso
不存在。所以我希望条件返回
目录不存在
。相反,它做了相反的操作,并返回
确实存在

问题:
这是相当令人困惑的,因为似乎条件的相同结构不能用于目录和变量。这是真的吗?如果是这样的话,那么这种差异是否有记录在案?

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


我看不出2行方法有任何问题,除了用双引号括住变量更安全(这样,如果变量的计算结果为零,就不会陷入语法问题),因此:if[-d“$dir_full_path”];然后…
-d
测试其参数是否为目录
-z
测试其参数是否为空字符串。您似乎已经回答了自己的问题:只有当变量目录_名称确实存在时,才会调用then。为什么您希望它对
-d$dir\u full\u path
的工作方式有所不同?我想这让我很困惑
-z
正在检查空字符串。我认为
-d
类似地意味着空目录(即目录不存在)。我在设置条件时使用了这个逻辑,这就是给我带来问题的原因。谢谢你的上述评论。它帮助了我。每个
test
选项都会检查特定的内容,文档会准确地告诉您它需要什么。没有任何逻辑使他们彼此相似。
if [ -d $directory_name ]; then echo "Directory already exists"
dir_full_path='/mnt/iso'
if [ -d $dir_full_path ]; then echo 'Directory does not exist'; else echo 'Does exist'; fi
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