次の機能を持つ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)は「移動」されず、選択した場合はループが停止せずに別の値を生成します。