为什么在没有为测试提供参数时,在bash中使用-f进行测试会返回true?

时间:2018-04-05 20:48:42

标签: bash shell ubuntu scripting

我在脚本文件中有以下代码:

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

1 个答案:

答案 0 :(得分:3)

这是test命令的POSIX behavior

命令test,带

  

1个论点:

     

如果$ 1不为null,则退出true(0);否则,退出false。

因此,使用一个非null参数调用test -f(或等效地,[ -f ]),因此返回true