スクリプトが呼び出されます。isFile.sh次のようになります。
#!/bin/sh エコ$1 エコ$2 もし[! -f $1 ]; echo "$1 (arg1) はファイルではありません。" フィリピン諸島 もし[! -f $2 ]; echo "$2 (arg2) はファイルではありません。" フィリピン諸島
まずtouch file.exist
。
私の実行結果はbash isFile.sh file.exist file.notexist
次のとおりです。
ファイルが存在する
.note ファイルが存在します。
file.notexist(arg2) はファイルではありません。
その後、bash isFile.sh "" file.notexist
出力は次のようになります。
(#空白)
.note ファイルが存在します。
file.notexist(arg2) はファイルではありません。
予想される出力は次のとおりです。
(#空白)
.note ファイルが存在します。
(arg1) はファイルではありません
file.notexist(arg2) はファイルではありません。
誰かが理由を説明できますか?
ベストアンサー1
[ ! -f $1 ]
問題は、拡張後[ ! -f ]
([ ! -f "" ]
思考とは異なります!)与えられたファイルが存在することを確認する場合は、文字列が空であることを確認[
することです。-f
空ではありませんが、!
最終終了コードがあるため、1
コマンドecho
は実行されません。
これがPOSIXシェルで変数を引用する必要がある理由です。
関連質問: