Bashの間接定数

Bashの間接定数

次の機能を持つbashスクリプトがあります。

random_move() {
  local sq
  while :; do
    sq=$(( $RANDOM % $# + 1 ))
    sq=${!sq}
    [ $sq -ne ${last:-666} ] && break
  done
  move "$sq"
}

1つ以上の引数を使用してこの関数を呼び出します。そこにある間接点(線)の意味は何ですかsq=${!sq}

答え1

まず、$ sqに1から関数引数の数までのランダムな数字が割り当てられます。次に、間接アドレッシングを介してsq番目のパラメータを割り当てます。たとえば、ifは、sq=4つまりを${!sq}意味します。${4}$4

また、$last値(設定されていない場合666)は「移動」されず、選択した場合はループが停止せずに別の値を生成します。

関連情報