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

时间:2015-03-05 09:04:00

标签: linux bash shell unix

我知道如果变量为空,则-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?

1 个答案:

答案 0 :(得分:2)

你需要一些双引号!如果未设置$a[ -f $a ]等同于[ -f ],除了测试-f是非空字符串之外,它不会做任何其他事情。另一方面,[ -f "$a" ]将按预期运行,测试是否存在没有名称的文件(这是假的)。

如果为$a分配了值,则[ -f $a ]将检查文件是否存在,[ -z $a ]将为false。但是,我强烈建议强烈建议在这两种情况下仍使用双引号,以避免word spliting和glob扩展出现问题。


-e检查任何是否存在(文件,目录,符号链接),而-f更具体 - 它会检查文件是否存在