将bash数组发送到后台循环

时间:2013-12-11 23:04:13

标签: bash shell

对于数组中的每个项目,我想执行相同的命令。

cat dummy.sh
#!/bin/bash

declare -a LIST=(1 2 3 4 5 6 7 8 9 10)
for ITEM in ${LIST[@]}; do
   sleep $ITEM
   for i in $(seq 2); do
      echo $ITEM
   done
done      

这是一个例子,但是这样的循环也不起作用。我想将每个for ITEM in ${LIST[@]}; do(数组中每个项目的命令)发送到后台,以便它们同时执行。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

在循环中使用subshell,然后wait使子进程完成:

#!/bin/bash

LIST=(1 2 3 4 5 6 7 8 9 10)

for ITEM in ${LIST[@]}; do
    (
        sleep $ITEM
        for i in $(seq 2); do
            echo $ITEM
        done
    ) &
done

wait