我想循环遍历与表单模式匹配的所有文件
for file in {prefix1, prefix2, ...}*{postfix1, postfix2, ...}; do
如何以编程方式替换{prefix1, prefix2, ...}
为包含这些名称的列表?我尝试过$prefix*$postfix
,prefix={prefix1,prefix2,...}
但它不起作用,因为大括号扩展是在变量扩展之前完成的。
答案1
如果前缀/后缀模式不包含空格,则可以使用扩展通配符:
shopt -s extglob
prefix='@(prefix1|prefix2|prefix3)'
suffix='@(suffix1|suffix2|suffix3)'
echo $prefix*$suffix
for file in $prefix*$suffix; do
#...
done
- 如果变量
IFS
设置适当,可以处理空格
答案2
一种方法是结合使用两个循环和 bash 数组,如下所示:
foo=(one two three)
bar=(four five six)
for f in ${foo[@]}; do
for g in ${bar[@]}; do
echo $f$g
done
done