A expansão do Brace não está funcionando em um script

3
for i in {1..40}
do 
   echo $i
done

Eu tenho

{1..40}

e eu gostaria de ter algo parecido com

1
2
3
and so on

para que eu possa usar a variável i dentro do parâmetro de um comando.

    
por Benjamin 25.03.2015 / 18:24

1 resposta

5

Em bash 3.0+ (assim como em zsh e ksh93), {1..40} expandirá para os números de 1-40 (inclusive). Em um shell POSIX como o dash (que é típico de /bin/sh no Ubuntu, por exemplo), ele não funcionará (chamamos esse problema de "bashism").

Em sistemas com os utilitários GNU, você pode usar seq para realizar isto:

for i in $(seq 1 40)
do
    echo $i
done

Para ser mais portátil, você terá que incrementar manualmente $i em um loop while :

i=1
while [ $i -le 40 ]
do
    echo $i
    i=$((i+1))
done

Esta versão portátil também é um pouco mais rápida, pois não possui o comando externo.

    
por 25.03.2015 / 19:26