GNU 并行数组参数组合?

GNU 并行数组参数组合?

我有一个 bash 函数:

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

export -f println

我想使用 GNU 并行来运行 println。该命令应采用以下数组的输入:

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

(...)- 我们在子 shell 中执行,以免将值返回给变量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

相关内容