我在 bash 中对这个表达式感到困惑:
$ var="" # empty var
$ test -f $var; echo $? # test if such file exists
0 # and this file exists, amazing!
$ test -f ""; echo $? # let's try doing it without var
1 # and all ok
我无法理解这种 bash 行为,也许有人可以解释一下?
这是因为空扩张$var
之前被删除test
看到它。你实际上正在跑步test -f
因此只有一个参数test
,即-f
。根据 POSIX,单个 arg 就像-f
为真,因为它不为空。
From POSIX 测试(1) 规范:
1 argument:
Exit true (0) if `$1` is not null; otherwise, exit false.
永远不会对具有空文件名的文件进行测试。现在有了明确的test -f ""
有两个参数和-f
被识别为“测试路径参数是否存在”的运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)