我有一个bash
脚本:-
for i in *.x *.y *.z *.a *.b *.c
do
echo "$i"
done
如果没有与该模式匹配的文件*.y
,则该变量i
的值为*.y
。当这种情况发生时,我的逻辑就会变得混乱。
我该如何阻止这种情况发生?
答案1
这就是您想要使用nullglob
不匹配的全局选项来扩展为空的地方,而不是保持原样
shopt -s nullglob
for i in *.x *.y *.z *.a *.b *.c; do
...
done
在这里,你还可以这样做:
shopt -s nullglob
for i in *.[xyzabc]; do
...
done
这会更有效,因为只有一个区域需要扩展。但请注意,顺序会有所不同。
或者对于不是单个字符的扩展名:
shopt -s nullglob extglob
for i in *.@(x|y|foo|bar); do
...
done
看为什么 nullglob 不是默认值?有关此内容的更多信息以及其他 shell 的替代方案。