중괄호(순열)와 배열 확장을 동시에 사용할 수 있나요?

중괄호(순열)와 배열 확장을 동시에 사용할 수 있나요?

Bash의 {}중괄호 확장 구문을 사용하면 간단한 순열 생성이 가능합니다.

# echo {b,c,d}{a,e,i,o,u}
ba be bi bo bu ca ce ci co cu da de di do du

$() echo그러나 매우 어색한 사용 을 제외하고 이것이 배열과 함께 사용될 수 있는지/어떻게 사용될 수 있는지는 나에게 명확하지 않습니다.eval

중괄호(순열) 확장을 사용하여 배열을 사용하는 쉬운 방법이 있습니까?

예를 들어 다음과 같은 것을 상상해 보십시오(물론 이것은 작동하지 않습니다).

CONS=( b c d )
VOWEL=( a e i o u )

echo {${CONS[@]}}{${VOWEL[@]}}

답변1

eval을 사용하거나 IFS=,; "${array[*]}"(값을 쉼표로 연결) 두 개의 for 루프를 사용할 수 있습니다.

$ CONS=(b c d);VOWEL=(a e i o u)
$ IFS=,;eval echo "{${CONS[*]}}{${VOWEL[*]}}"
ba be bi bo bu ca ce ci co cu da de di do du
$ for c in "${CONS[@]}";do for v in "${VOWEL[@]}";do echo "$c$v";done;done|paste -sd' ' -
ba be bi bo bu ca ce ci co cu da de di do du

답변2

이것은 가능하다 zsh:

$ CONS=( b c d )
$ VOWEL=( a e i o u )
$ echo $^CONS$^VOWEL
ba be bi bo bu ca ce ci co cu da de di do du

또는es:

; VOWEL=( a e i o u )
; CONS=( b c d )
; echo $VOWEL^$CONS
ab ac ad eb ec ed ib ic id ob oc od ub uc ud

bashor 를 사용하면 ksh93다음과 같은 복잡한 작업을 수행해야 합니다.

VOWEL=( a e i o u )
CONS=( b c d )
qVOWEL=$(printf %q, "${VOWEL[@]}")
qCONS=$(printf %q, "${CONS[@]}")
eval "echo {${qVOWEL%,}}{${qCONS%,}}"

답변3

흥미롭지만 아마도 최고는 아닐 것입니다.

temparr=( b{a,e,i,o,u} c{a,e,i,o,u} d{a,e,i,o,u} )
echo "${temparr[@]}"

관련 정보