たとえば、次のような場合ですtest -e
。
VAR="<this is a file path: /path/to/file/or/dir"
test -e $VAR && do_something || do_anotherthing
"$VAR"
Q:これをここで使用する必要がありますか?必要でない場合は、ここで詳細が好きではありません。これは$VAR
明らかにこの場合はパスであるため、空の文字列の場合、パスが空の文字列ではないため、常に失敗する必要があり、私のロジックによると、二重引用符は必要ありません。
ただし、文字列テストの場合、test -n は次のようになります。
VAR="<this is a string"
test -n $VAR && do_something || do_anotherthing
それから私のロジックによると、$VAR
二重引用符で囲む必要があります。"$VAR"
空の文字列に展開できるため、二重引用符でない場合はパラメータとしてのみ拡張され、-n
常にtrueです。
したがって、実際の質問は、テストコマンドで文字列-n
と文字列に-z
二重引用符を使用する必要があるかどうか疑問です。
ベストアンサー1
一般的な規則は、シェルがその内容に対してトークン分割とワイルドカード拡張を実行したくない限り、すべての変数を二重引用符で囲むことです。
明らかに
$VAR
この場合はパスなので、空の文字列であれば常に失敗しなければなりません。 [...]私のロジックによると、二重引用符は必要ありません。
正反対。オペランドのない動作は、test -e
この特別な場合に変数を引用する必要があるもう1つの理由です。
$ unset foo # or foo=""
$ test -e $foo # note this is equivalent to `test -e'
$ echo $?
0
$ test -e "$foo"
$ echo $?
1
$