何时在 shell IF 条件下使用 -f 和 -z

When to use -f and -z in shell IF condition

我知道如果一个变量为空,-z可以在IF条件下使用。 我无法在 Unix shell.

中区分以下条件
a=   <empty>

if [ -z $a ]; then echo 1; else echo 2; fi

--> gives 1

if [ -f $a ]; then echo 1; else echo 2; fi

--> gives 1

那么请告诉我什么时候使用 -f 和 -z 好吗?

你需要一些双引号!如果 $a 没有设置,[ -f $a ] 等同于 [ -f ],它除了测试 -f 是一个非空字符串之外什么都不做。另一方面,[ -f "$a" ] 会像您预期的那样运行,测试是否存在没有名称的文件(这是错误的)。

如果$a已经赋值,那么[ -f $a ]会检查文件是否存在,而[ -z $a ]将为假。但是,我 强烈 建议在这两种情况下仍然使用双引号,以避免 word spliting 和 glob 扩展出现问题。


-e 检查 任何东西 是否存在(文件、目录、符号 link),而 -f 更具体 - 它检查文件 存在。