为什么在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
谢谢,很抱歉重复,在查找此问题时没有找到该问题。