何时在 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
更具体 - 它检查文件 存在。
我知道如果一个变量为空,-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
更具体 - 它检查文件 存在。