私は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がデフォルトではないのはなぜですか?これに関する詳細情報と他のシェルの代替。