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

为什么在bash中使用-f进行测试时,当没有参数提供给测试时返回true?,bash,shell,ubuntu,scripting,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(因为它查找一个没有

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

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版

这是
测试
命令的源代码:

命令
test
,带有

1论点:

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


因此,
test-f
(或者,相当于,
[-f]
)是用一个非空参数调用的,因此它返回
true

谢谢,很抱歉重复,在查找此问题时没有找到该问题。