Por que 'para anytext; fazer loop quatro vezes?

9

isso é um erro ou uma característica?
Parece acontecer para alfanuméricos não citados.

Executando o GNU bash, versão 4.1.5

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

resultado:

1
2
3
4
Peter.O
fonte

Respostas:

14

Esse é um recurso do forcomando composto, conforme descrito por help for:

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

Execute comandos para cada membro em uma lista.

O forloop executa uma sequência de comandos para cada membro em uma lista de itens. Se in WORDS ...;não estiver presente, in "$@"será assumido. Para cada elemento em WORDS, NAMEé definido para esse elemento e os COMMANDSsão executados.

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

homem a trabalhar
fonte
Obrigado ... O que mais me impressionou foi o fato de ter acontecido na linha de comando. Na verdade, não tentei em um script. Devo ter usado set a b c dem algum momento recentemente. Costumo usar setdessa maneira em um script para testar .. Depois de reiniciar o terminal, ele parou ... (faz sentido agora) ..
Peter.O
12

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

Gilles 'SO- parar de ser mau'
fonte