バックグラウンドで実行した処理が全て完了するまで待つ

$ cat 20150906.sh 
#!/bin/bash --norc

# 引数で指定された秒数バックグラウンドでSLEEPする
function _sleep()
{
        sleep $1 &
        # バックグラウンドで実行されたプロセスのPIDを設定
        PID=$!
        echo "sleep $1 seconds; pid=${PID}"
}

# 10〜20秒バックグラウンドでSLEEPする
for i in `seq 10 20` ; do
        _sleep $i
        i=`expr $i + 1`
done

echo "---"

# 全JOBの終了を待つ(1)
#for job in `jobs -p`; do
#       echo "waiting: $job"
#       sleep 1
#done

# バックグラウンドで実行中のプロセス一覧を表示
# "+"がカレント・ジョブを表し,"-"が前のジョブを表す
# -l オプションでPIDも表示する
jobs -l

# 全JOBの終了を待つ(2)
# バックグラウンドプロセスが全て終了するまでWAITする
wait

exit 0
$ 
$ ./20150906.sh 
sleep 10 seconds; pid=4576
sleep 11 seconds; pid=4578
sleep 12 seconds; pid=4580
sleep 13 seconds; pid=4582
sleep 14 seconds; pid=4584
sleep 15 seconds; pid=4586
sleep 16 seconds; pid=4588
sleep 17 seconds; pid=4590
sleep 18 seconds; pid=4592
sleep 19 seconds; pid=4594
sleep 20 seconds; pid=4596
---
[1]   4576 実行中               sleep $1 &
[2]   4578 実行中               sleep $1 &
[3]   4580 実行中               sleep $1 &
[4]   4582 実行中               sleep $1 &
[5]   4584 実行中               sleep $1 &
[6]   4586 実行中               sleep $1 &
[7]   4588 実行中               sleep $1 &
[8]   4590 実行中               sleep $1 &
[9]   4592 実行中               sleep $1 &
[10]-  4594 実行中               sleep $1 &
[11]+  4596 実行中               sleep $1 &
$