私はこの表現によってbashで混乱しています:
$ var="" # empty var
$ test -f $var; echo $? # test if such file exists
0 # and this file exists, amazing!
$ test -f ""; echo $? # let's try doing it without var
1 # and all ok
私はそのような bash の動作を理解できません。おそらく誰か説明できますか?
の空展開が見える$var
前に取り除かれているからです。test
実際に実行しているため、test -f
への引数は 1 つだけです。POSIX によると、単一の引数 likeは空ではないため true です。test
-f
-f
1 argument:
Exit true (0) if `$1` is not null; otherwise, exit false.
ファイル名が空のファイルのテストはありません。現在、明示的test -f ""
に2つの引数があり-f
、「パス引数の存在をテストする」ための演算子として認識されます。
var
が空の場合$var
、引用されているかどうかにかかわらず、動作が異なります。
test -f $var # <=> test -f ==> $? is 0
test -f "$var" # <=> test -f "" ==> $? is 1
したがって、この例は次のように示しています。を引用する必要があります$var
。