`for in`コマンドファイル名拡張の問題

`for in`コマンドファイル名拡張の問題

私はbashスクリプトを持っています: -

for i in *.x *.y *.z *.a *.b *.c
do
    echo "$i"
done

パターンに一致するファイルがない場合、*.yこの変数iの値はです*.y。これが起こると、私の論理はめちゃくちゃになります。

これが起こらないようにするにはどうすればよいですか?

ベストアンサー1

nullglobここでは、そのままにしておらず、一致しないグローバルオプションを使用してnullに拡張したい場合です。

shopt -s nullglob
for i in *.x *.y *.z *.a *.b *.c; do
  ...
done

ここでも次のことができます。

shopt -s nullglob
for i in *.[xyzabc]; do
  ...
done

1つの領域しか拡張できないので、より効率的です。しかし、順番が違うので注意してください。

または単一文字ではなく拡張の場合:

shopt -s nullglob extglob
for i in *.@(x|y|foo|bar); do
  ...
done

バラよりnullglobがデフォルトではないのはなぜですか?これに関する詳細情報と他のシェルの代替。

おすすめ記事