indirecting integer in bash

2

Eu tenho um script bash que contém a seguinte função:

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

Esta função é chamada com um ou mais argumentos. Qual é o ponto de indireção ( sq=${!sq} line) aí?

    
por Martin 25.10.2017 / 23:55

1 resposta

5

Primeiro, $ sq recebe um número aleatório de um para o número de argumentos da função. Então, o argumento sq-th é atribuído a ele pela indirecção. Por exemplo, se sq=4 , então ${!sq} significa ${4} , ou seja, $4 .

Além disso, o valor de $ last (ou 666 se não definido) nunca é "movido", se estiver selecionado, o loop não para e outro valor é gerado.

    
por 26.10.2017 / 00:01

Tags