Как сказал Андре Гелинас, $!
хранит pid последнего фонового процесса.
Если вы в порядке со всеми командами, выполняющимися параллельно, вы можете использовать это
#!/bin/ksh
i=0
while [ "$i" -lt 5 ]
do
{ ls 1>/dev/null 2>&1; } &
pids[$i]=$!
i=$((i+1))
# print the index and the pids collected so far
echo $i
echo "${pids[*]}"
done
И результат будет выглядеть примерно так:
1
5534
2
5534 5535
3
5534 5535 5536
4
5534 5535 5536 5537
5
5534 5535 5536 5537 5538
Если вы хотите выполнять команды последовательно, вы можете использовать wait
.
#!/bin/ksh
i=0
while [ "$i" -lt 5 ]
do
{ ls 1>/dev/null 2>&1; } &
pids[$i]=$!
wait
i=$((i+1))
echo $i
echo "${pids[*]}"
done