Bash

帶有用於模式匹配的變數的 Bash 大括號擴展

  • February 12, 2020

我想遍歷與表單模式匹配的所有文件

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

如何以程式方式替換{prefix1, prefix2, ...}為包含這些名稱的列表?我試過$prefix*$postfix了,prefix={prefix1,prefix2,...}但它不起作用,因為大括號擴展是在變數擴展之前完成的。

如果前綴/後綴模式不包含空格,則可以使用擴展萬用字元:

shopt -s extglob
prefix='@(prefix1|prefix2|prefix3)'
suffix='@(suffix1|suffix2|suffix3)'

echo $prefix*$suffix

for file in $prefix*$suffix; do
   #...
done
  • 如果變數IFS設置得當,可以處理空格

一種方法是使用兩個循環結合 bash 數組,如下所示:

foo=(one two three)
bar=(four five six)
for f in ${foo[@]}; do 
 for g in ${bar[@]}; do
   echo $f$g
 done
done

引用自:https://unix.stackexchange.com/questions/567143