下面是一個例子程序:並行設置變量在bash
#!/bin/bash
for x in {1..5}
do
output[$x]=$(echo $x) &
done
wait
for x in {1..5}
do
echo ${output[$x]}
done
我希望它可以運行並打印出分配給output
陣列的每個成員的值,但不打印輸出。刪除&
正確分配變量。我必須使用不同的語法來並行實現這一點嗎?
下面是一個例子程序:並行設置變量在bash
#!/bin/bash
for x in {1..5}
do
output[$x]=$(echo $x) &
done
wait
for x in {1..5}
do
echo ${output[$x]}
done
我希望它可以運行並打印出分配給output
陣列的每個成員的值,但不打印輸出。刪除&
正確分配變量。我必須使用不同的語法來並行實現這一點嗎?
這
output[$x]=$(echo $x) &
放整個分配在後臺任務(子過程),這就是爲什麼你沒有看到的結果,因爲它沒有傳播到父進程。
您可以使用wait to wait for subprocesses,但返回結果(狀態代碼除外)將很困難。也許你可以將中間結果寫入文件,並在所有進程完成後收集這些結果? (不是很好,我很欣賞)
如果你想避免寫入文件,你可以使用GNU parallel
:
#!/bin/bash
output=(`parallel -k --gnu echo {1} ::: {1..5}`)
for i in ${output[@]}
do
echo $i
done
的-k
是保持輸出
+1哦順序。尼斯! –