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

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.


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).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.