我有一个 bash 脚本,其中包含以下功能:
random_move() {
local sq
while :; do
sq=$(( $RANDOM % $# + 1 ))
sq=${!sq}
[ $sq -ne ${last:-666} ] && break
done
move "$sq"
}
Run Code Online (Sandbox Code Playgroud)
使用一个或多个参数调用此函数。sq=${!sq}
那里的间接点(线)是什么?
首先,$sq 被分配一个随机数,从 1 到函数的参数数。然后,通过间接方式将 sq-th 参数分配给它。例如,如果sq=4
,则${!sq}
表示${4}
,即$4
。
此外,$last 的值(如果未设置则为 666)永远不会“移动”,如果它被选中,循环不会停止并生成另一个值。