9

で始まるすべてのファイルをループするfooと、

for f in foo* ; do echo "result = $f" ; done

問題は、次のように開始するファイルがないfoo場合です。

result = foo*

で始まるファイルがない場合でも、ループが 1 回実行されることを意味しますfoo

これはどのように可能ですか?すべてのファイルをループするにはどうすればよいですか (ファイルがない場合はループしません)。

4

2 に答える 2

10

nullglobを設定すると、この動作を停止できます。

shopt -s nullglob

リンクされたページから:

nullglobは、[[glob]] 展開を変更する Bash シェル オプションであり、どのファイルにも一致しないパターンは、それ自体ではなくゼロ引数に展開されます。

この設定は次のように削除できます-u(未設定sですが、設定用です):

shopt -u nullglob

テスト

$ touch foo1 foo2 foo3
$ for file in foo*; do echo "$file"; done
foo1
foo2
foo3
$ rm foo*

どれどれ:

$ for file in foo*; do echo "$file"; done
foo*

設定nullglob

$ shopt -s nullglob
$ for file in foo*; do echo "$file"; done
$

そして、動作を無効にします。

$ shopt -u nullglob
$ for file in foo*; do echo "$file"; done
foo*
于 2014-10-08T11:29:30.820 に答える