Bash 배열의 데카르트 곱

Bash 배열의 데카르트 곱

루프를 사용하지 않고 bash에서 배열의 데카르트 곱을 생성하는 방법이 있습니까?

중괄호를 사용하여 유사한 작업을 수행할 수 있습니다.

echo {a,b,c}+{1,2,3}
a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3

하지만 배열을 입력으로 사용해야 하는데 대부분의 명백한 트릭이 실패했습니다.

답변1

버팀대 확장을 사용할 수 있습니다. 하지만 추악합니다. eval중괄호 확장은 (배열) 변수 확장보다 먼저 발생하므로 사용해야 합니다 . 그리고 쉼표 "${var[*]}"를 만듭니다 IFS=,.

문자열을 생성하는 명령을 고려해보세요

echo {a,b,c}+{1,2,3}

배열이 lettersand 라고 가정하면 표기법을 사용하여 이를 수행 numbers할 수 있습니다 "${var[*]}". 즉, IFS=,요소 ​​사이에 공백 대신 쉼표를 삽입하는 것입니다.

letters=(a b c)
numbers=(1 2 3)
IFS=,
echo {"${letters[*]}"}+{"${numbers[*]}"}

어느 인쇄

{a,b,c}+{1,2,3}

이제 eval이 문자열을 추가하여 명령으로 실행되도록 하세요.

eval echo {"${letters[*]}"}+{"${numbers[*]}"}

당신은 얻는다

a+1 a+2 a+3 b+1 b+2 b+3 c+1 c+2 c+3

관련 정보