Bash for loop com intervalo {# .. #}


17

O {# .. #} gera uma sequência de números ou caracteres, da mesma forma que range () no Python. Se eu executar o comando echo {1..5}na linha de comando, tenho:

1 2 3 4 5

Em vez disso, o seguinte script bash não funciona conforme o esperado.

for i in {1..3};
do
    echo "Iteration $i"
done

irá imprimir:

Iteration {1..3}

Por quê?
* Eu poderia usar, seqmas li que está desatualizado ( http://www.cyberciti.biz/faq/bash-for-loop/ )


Este erro ocorre se o script for executado pelo comando "sh" (tente usar "bash").
Shake0

Respostas:


22

Eu tentei o seu código (copiar e colar em um terminal) e ele produziu um resultado diferente do que você postou:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Estou usando o Linux Mint 12 Lisa (derivado do Ubuntu) com o bash versão 4.2.10 (1)


2
Você está certo! Pensei sh e do bash eram a mesma coisa ..
Shake0

11
não, bash e sh são bastante diferentes ... bash é mais capaz do que sh, foi feito sobre os ombros de sh :) embora ambos têm um bom grau de compatibilidade, eles também têm suas diferenças
zipizap

note que você pode fazer listas aninhadas como para var em {{i..j}, {l..m}}; echo $ var; feito se precisar de uma sequência irregular, como 1 2 3 7 8 9
marrom.2179

Observe que em algumas distros está /bin/shrealmente apontando para o bash, no Debian e no Ubuntu está normalmente apontando para o /bin/dashque é principalmente compatível com POSIX, mas não suporta a mesma sintaxe do Bash.
dragon788
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.