フォームパターンに一致するすべてのファイルを繰り返したいです。
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
1つのアプローチは、次のようにbash配列と組み合わせた2つのループを使用することです。
foo=(one two three)
bar=(four five six)
for f in ${foo[@]}; do
for g in ${bar[@]}; do
echo $f$g
done
done