루프를 사용하지 않고 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}
배열이 letters
and 라고 가정하면 표기법을 사용하여 이를 수행 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