ファイルが存在するかどうかをテストするために、次の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
変数が空の場合、コマンドは次のようになります。
[ -e ]
この場合、[..]
1つのパラメータで呼び出すことができます-e
。文字列"-e"
はnullではないため、test
trueが返されます。
この動作は次のように定義されます。POSIXテスト:
次のリストでは、$ 1、$ 2、$ 3、および$ 4はテストするパラメータを示しています。
パラメータ0:
偽(1)を終了します。
パラメータ1つ:
$1 が null でない場合は true(0) を返し、そうでない場合は false を返します。
....
動作するには、次の操作を行う必要があります。変数を二重引用符で囲む:
[ -e "$MYAPPPATH" ]
-e
これは、パラメータが空の文字列の場合はfalseであるために機能します。