Por que 'para qualquer texto; fazer loop quatro vezes?

8

Isso é um bug ou um recurso?
Parece acontecer para alfanuméricos sem numeração .

Executando o GNU bash, versão 4.1.5

for alpha01234; do echo $((++i)); done

saída:

1
2
3
4
    
por Peter.O 24.11.2011 / 17:01

2 respostas

14

Esse é um recurso do comando for compound, conforme descrito por help for :

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Execute commands for each member in a list.

The for loop executes a sequence of commands for each member in a list of items. If in WORDS ...; is not present, then in "$@" is assumed. For each element in WORDS, NAME is set to that element, and the COMMANDS are executed.

Então o código que você citou é provavelmente executado em um script que foi chamado com 4 parâmetros.

    
por 24.11.2011 / 17:21
12

for x; do … é um atalho para for x in "$@"; do … : itera sobre os parâmetros posicionais. Se ele faz um loop quatro vezes, significa que você tem quatro parâmetros posicionais ( $1 a $4 ).

    
por 24.11.2011 / 17:22