空の文字列はファイルですか? (もし[!-f""])

空の文字列はファイルですか? (もし[!-f

スクリプトが呼び出されます。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シェルで変数を引用する必要がある理由です。

関連質問:

おすすめ記事