Bash 大括号扩展,带有用于模式匹配的变量

Bash 大括号扩展,带有用于模式匹配的变量

我想循环遍历与表单模式匹配的所有文件

for file in {prefix1, prefix2, ...}*{postfix1, postfix2, ...}; do

如何以编程方式替换{prefix1, prefix2, ...}为包含这些名称的列表?我尝试过$prefix*$postfixprefix={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

相关内容