패턴 일치를 위한 변수를 사용한 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

관련 정보