1

次のボーンシェルスクリプトのスナップショットに出くわしました:

hosts=( $(cat $TOP/rhost))
j=0
for k in {1..20}
do
  host=${hosts[$j]}
  su  user$k -c  "/usr/bin/rsh $host $TOP/test.sh $JOBNUM $QUEUE $TIME $TOP $LSF_ENVDIR" &
  j=`expr $j + 1`
  j=$(($j%${#hosts[@]}))
done

一般的に、このスクリプトはホスト内の各ホストで test.sh を実行するために何度も繰り返されることを理解しています。しかし、私はこの行が何をするのか知りませんでした:

  j=$(($j%${#hosts[@]}))

#hosts[@] から計算された j mod 何かのようですが、ここで「#」と「@」は何を意味しますか? ありがとう。

4

1 に答える 1

0

${#hosts[@]}配列変数「hosts」の項目数を意味します。Bourne シェルには配列変数がないため、これは bash に固有のものです。

于 2013-11-06T11:18:27.520 に答える