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