这是一个示例程序:
#!/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
数组每个成员的值,但它什么也不打印。删除&
正确分配的变量。我必须使用不同的语法来并行实现吗?
这是一个示例程序:
#!/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 来等待 subprocesses,但返回结果(除了状态码)会很困难。也许您可以将中间结果写入文件,并在所有进程完成后收集这些结果?(不太好,我很感激)
如果要避免写入文件,可以使用GNU parallel
:
#!/bin/bash
output=(`parallel -k --gnu echo {1} ::: {1..5}`)
for i in ${output[@]}
do
echo $i
done
-k
是为了保持输出的 顺序