Bash
Bash 文件存在測試始終為真
我有以下 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"
不為空,因此test
返回 true。此行為由POSIX test定義:
在以下列表中, $ 1, $ 2, $ 3, and $ 4 表示要測試的參數:
0 個參數:
退出假 (1)。
1個論點:
如果 $1 不為空,則退出 true (0);否則,退出假。
….
為了使它工作,你必須雙引號你的變數:
[ -e "$MYAPPPATH" ]
這是有效的,因為
-e
使用空字元串的參數是錯誤的。