faz o comando bash 'shift' alterar a contagem de argumentos '$ #'

3

Quando eu uso o comando bash shift , isso altera a contagem de argumentos em $# ?

Note from author: When I had this question I did not find it (yet) on this community. Therefore I simply tried it and got my answer. Because I thought it might help others I posted what I learned here as a self-answered question.

    
por Paul van Leeuwen 21.10.2018 / 14:54

1 resposta

9

Sim, é explicitamente exigido no padrão :

shift [n] The positional parameters shall be shifted. Positional parameter 1 shall be assigned the value of parameter (1+n), [...] and the parameter '#' is updated to reflect the new number of positional parameters.

Considere este script:

#!/usr/bin/env bash
echo "$#"
shift
echo "$#"

Chamar como script-file first second third imprimirá 3 seguido por 2 .

Isso significa que podemos fazer coisas como:

#!/usr/bin/env bash
while [[ "$#" > 0 ]] ; do
    echo "$1"
    shift
done

... que imprimiria os argumentos um por um em sua própria linha.

    
por 21.10.2018 / 14:54