我有以下 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'
这是什么原因呢?
我需要做什么才能使这项工作按预期进行?
答案1
答案2
习惯引用变量。总是引用它们;必要时可以防止误评估:
if [ -e "$MYAPPPATH" ]
使用特定于 bash 的复合命令就不会发生这种情况:
if [[ -e $MYAPPPATH ]]
答案3
还有一些其他方法:
之前检查变量(根据注释使用版本)
if [ -n "$MYAPPPATH" ] && [ -e "$MYAPPPATH" ] ; then ...
使用
locate
* 代替find
if locate -w "$APPDIR/myapp*" ; then ...
*1 使用时locate
不要忘记更新文件数据库updatedb