我在脚本文件中有以下代码:
if [ -f $FILEPATH ] ; then
cp $FILEPATH ~/some/other/dir
fi
现在,由于同一个脚本文件中的错误,这段代码上面的某些行变量$ FILEPATH没有收到值并且未定义,所以真正执行的是:
if [ -f ] ; then
cp $FILEPATH ~/some/other/dir
fi
在这种情况下,我希望这个测试要么抛出一个错误(因为没有-f的参数),要么返回false(因为它查找没有名称的文件),但测试返回true并且内容为if条件被执行。
我想知道bash如何解释此测试在这种情况下返回true。什么是真正的测试?
我在Ubuntu上运行bash版本4.3.48
答案 0 :(得分:3)
这是test
命令的POSIX behavior:
命令test
,带
1个论点:
如果$ 1不为null,则退出true(0);否则,退出false。
因此,使用一个非null参数调用test -f
(或等效地,[ -f ]
),因此返回true
。