我有以下bash脚本行来测试文件是否存在:
MYAPPPATH=$(find $APPDIR -iname myapp* -print)
if [ -e $MYAPPPATH ]
then
echo "File exists"
fi
但是,当以“ myapp”开头的文件不存在,因此MYAPPPATH =''时,上述检查将再次成功。查看使用时会发生什么,set -x
并且文件不存在:
++ find /path/to/app -iname 'myapp*' -print
+ MYAPPPATH=
+ '[' -e ']'
+ echo 'File exists'
这是什么原因呢?
为了达到预期效果,我需要做什么?
当您的变量为空时,您的命令将变为:
[ -e ]
在这种情况下,您[..]
使用一个参数调用-e
。字符串"-e"
不为null,因此test
返回true。
此行为由POSIX test定义:
在下面的列表中,$ 1,$ 2,$ 3和$ 4表示要测试的参数:
0个参数:
退出假(1)。
1个论点:
如果$ 1不为null,则退出true(0);否则,返回true(0)。否则,退出false。
....
为了使它起作用,必须对变量加双引号:
[ -e "$MYAPPPATH" ]
之所以有效-e
,是因为带有空字符串的参数为false。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句