GNU Parallel:如何引用陣列元素?

GNU Parallel:如何引用陣列元素?

這是我的案例場景:

luis@Balanceador:~$ echo ${array[@]}
a b
luis@Balanceador:~$ echo ${array[1]}
a
luis@Balanceador:~$ echo ${array[2]}
b
luis@Balanceador:~$ parallel echo ${array[]} ::: 1 2
-bash: ${array[]}: bad substitution
luis@Balanceador:~$ parallel echo ${array[{}]} ::: 1 2
-bash: {}: syntax error: operand expected (error token is "{}")
luis@Balanceador:~$ parallel echo ${array[{1}]} ::: 1 2
-bash: {1}: syntax error: operand expected (error token is "{1}")
luis@Balanceador:~$ parallel echo ${array[{#}]} ::: 1 2
-bash: {#}: syntax error: operand expected (error token is "{#}")

如何在 GNU Parallel 上引用某些陣列的各個元素?

當然,這很簡單,但我在手冊上找不到它。

這個問題已經回答了這個其他,但是,問完之後,我認為這是兩個不同的問題。

答案1

雖然看起來很容易,但實際上非常困難。

由 GNU Parallel 啟動的作業不會在執行 GNU Parallel 的相同 shell 內啟動。所以它看起來像這樣:

bash[1]---perl(running parallel)---bash[2]

$array 在 bash[1] 中定義,但您想在 bash[2] 中使用它。這是不可能完全做到的(即如果你想對數組進行寫入訪問),但是我們做一個複製可用的$array:

env_parallel 'echo ${array[{}]}' ::: 1 2

env_parallel(在 GNU Parallel 20140822 中引入)將 bash[1] 的整個環境複製到 bash[2](因此您的環境必須有點小),在作業運行之前啟動它。

env_parallel非常不穩定,所以如果您發現錯誤,請報告它們。

相關內容