/ /なぜテストに引数が与えられていないときにbashの-fでテストするとtrueを返すのですか? [複製] - bash、シェル、ubuntu、スクリプティング

テストに引数が与えられていないときに、bashの-fを使ってテストするとtrueを返すのはなぜですか? [複製] - bash、シェル、ubuntu、スクリプティング

私はスクリプトファイルに次のコードを書いています:

if [ -f $FILEPATH ] ; then
cp $FILEPATH ~/some/other/dir
fi

さて、この同じスクリプトファイルのエラーのために、このコード部分の上にいくつかの行があります。変数$ FILEPATHは値を受け取っておらず、未定義です。実際に実行されるのは次のとおりです。

if [ -f ] ; then
cp $FILEPATH ~/some/other/dir
fi

この状況で私はこのテストが(-fに引数がないため)エラーをスローするか、falseを返すか(名前のないファイルを検索するため)、テストはtrueを返し、if条件の内容が実行されます。

私はこのシナリオでbashがこのテストをどのように解釈するのかと疑問に思っています。実際のテストはどうでしたか?

私はUbuntu上でbashバージョン4.3.48を実行しています

回答:

回答№1は2

それは POSIXの動作 のために test コマンド:

コマンド test、と

1つの議論:

$ 1がnullでない場合はtrue(0)を終了します。それ以外の場合は、falseを終了します。

したがって test -f (または、同等に、 [ -f ])は1つの非NULL引数で呼び出されるため、 true.