で始まるすべてのファイルをループするfoo
と、
for f in foo* ; do echo "result = $f" ; done
問題は、次のように開始するファイルがないfoo
場合です。
result = foo*
で始まるファイルがない場合でも、ループが 1 回実行されることを意味しますfoo
。
これはどのように可能ですか?すべてのファイルをループするにはどうすればよいですか (ファイルがない場合はループしません)。
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*