我知道如果变量为空,则-z可以在IF
条件下使用。
我无法区分Unix shell中的以下条件。
a= <empty>
if [ -z $a ]; then echo 1; else echo 2; fi
- &GT;给出1
if [ -f $a ]; then echo 1; else echo 2; fi
- &GT;给出1
那么请告诉我何时使用-f和-z?
答案 0 :(得分:2)
你需要一些双引号!如果未设置$a
,[ -f $a ]
等同于[ -f ]
,除了测试-f
是非空字符串之外,它不会做任何其他事情。另一方面,[ -f "$a" ]
将按预期运行,测试是否存在没有名称的文件(这是假的)。
如果为$a
分配了值,则[ -f $a ]
将检查文件是否存在,[ -z $a ]
将为false。但是,我强烈建议强烈建议在这两种情况下仍使用双引号,以避免word spliting和glob扩展出现问题。
-e
检查任何是否存在(文件,目录,符号链接),而-f
更具体 - 它会检查文件是否存在