在bash中并行设置变量

时间:2013-01-31 13:02:30

标签: bash parallel-processing

这是一个示例程序:

#!/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数组的每个成员的值,但它不会打印任何内容。正确删除&指定变量。我必须使用不同的语法来并行实现这一目标吗?

2 个答案:

答案 0 :(得分:4)

output[$x]=$(echo $x) &

整个赋值放在后台任务(子进程)中,这就是为什么你没有看到结果,因为它不会传播到父进程。

您可以使用wait to wait for subprocesses,但返回结果(状态代码除外)将很困难。也许您可以将中间结果写入文件,并在所有进程完成后收集这些结果? (不好,我很欣赏)

答案 1 :(得分:2)

如果您想避免编写文件,可以使用GNU parallel

#!/bin/bash
output=(`parallel -k --gnu echo {1} ::: {1..5}`)
for i in ${output[@]}
do
   echo $i
done

-k是保留输出的顺序