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