Bash
帶有用於模式匹配的變數的 Bash 大括號擴展
我想遍歷與表單模式匹配的所有文件
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