GNU 병렬 배열 매개변수 조합?

GNU 병렬 배열 매개변수 조합?

bash 기능이 있습니다.

println(){echo "$1" "$2" "$3"}

그리고

export -f println

println을 실행하기 위해 GNU 병렬을 사용하고 싶습니다. 명령은 다음 배열에서 입력을 받아야 합니다.

a1=(a b c) 

a2=(x y)

a3=(z1 z2)

다음이 출력되어야 합니다.

   a x a3
   a y a3
   b x a3
   b y a3
   c x a3
   c y a3

어떤 명령이 이를 수행할 수 있나요? 나는 다음과 같은 명령을 기대했습니다.

 parallel ... println ... a1 ... a2 .... a3

감사합니다!

답변1

:::그냥 중간에 넣으세요 :

$ parallel println ::: "${a1[@]}" ::: "${a2[@]}" ::: "${a3[@]}"
a y z1
a x z1
a y z2
a x z2
b x z2
b x z1
b y z2
b y z1
c x z2
c x z1
c y z1
c y z2

은(는) 잘못 되었습니다. println(){echo "$1" "$2" "$3"}이어야 합니다 println(){ echo "$1" "$2" "$3"; }.

답변2

신청 가능지원 확장Bash에서 변수 사용IFS

(IFS=,; eval printf %s "{${a1[*]}}\ {${a2[*]}}\ {${a3[*]}}\$'\n'")
a x z1
a x z2
a y z1
a y z2
b x z1
b x z2
b y z1
b y z2
c x z1
c x z2
c y z1
c y z2

(...)- 변수에 값이 반환되는 것을 방지하기 위해 서브셸에서 실행합니다 IFS.

또는 귀하의 예와 같습니다.

(IFS=,; eval printf %s "{${a1[*]}}\ {${a2[*]}}\ a3\$'\n'")
a x a3
a y a3
b x a3
b y a3
c x a3
c y a3

관련 정보