bash中的间接整数

Mar*_*tin 2 bash

我有一个 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}那里的间接点(线)是什么?

cho*_*oba 5

首先,$sq 被分配一个随机数,从 1 到函数的参数数。然后,通过间接方式将 sq-th 参数分配给它。例如,如果sq=4,则${!sq}表示${4},即$4

此外,$last 的值(如果未设置则为 666)永远不会“移动”,如果它被选中,循环不会停止并生成另一个值。