這是我的案例場景:
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
非常不穩定,所以如果您發現錯誤,請報告它們。