![空の文字列はファイルですか? (もし[!-f""])](https://linux33.com/image/138205/%E7%A9%BA%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%81%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20(%E3%82%82%E3%81%97%5B!-f%22%22%5D).png)
スクリプトが呼び出されます。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シェルで変数を引用する必要がある理由です。
関連質問: