A criação de um intervalo de números de 08 a 10 no bash não inclui 0 na frente dos números de um dígito

0

Na minha máquina local, onde executo o CentOS 7.2, quando faço isso:

for i in {8..12}; do echo ${i}; done

Eu tenho:

8
9
10

Mas quando faço isso:

for i in {08..10}; do echo ${i}; done

Eu tenho:

08
09
10

Mas no servidor ao qual eu tenho acesso, que roda o CentOS 5.6, executar os dois comandos resulta na mesma saída:

8
9
10

Por que não há zeros na frente de 8 e 9? É por causa da versão bash, ou apenas configuração do ambiente? Posso alterá-lo por sessão ou permanentemente, então meu servidor colocará esse zero na frente de números menores que 10?

    
por Learner 07.04.2017 / 08:21

3 respostas

3

É provável que o bash em sua máquina CentOS 5.6 seja a versão 3. O preenchimento zero de inteiros em expansões de chaves foi introduzido na versão 4 de bash .

A solução seria atualizar sua instalação de bash para uma versão mais recente ou usar uma forma alternativa de gerar números inteiros com zero, como

printf '%02d\n' {8..10}

Alternativamente, algo nos moldes de

for i in 0{1..9} {10..20}; do
    echo "$i"
done

também funcionará.

    
por 07.04.2017 / 09:24
2

Em vez de usar bash , você pode usar zsh de onde essa sintaxe vem.

zsh tem suportado {08..10} desde 1995 (introduzido em 2.6-beta4), então estará disponível no zsh de qualquer versão do CentOS (primeira versão do CentOS em 2004).

Você realmente usou a sintaxe zsh em seu exemplo, como em bash , você precisa de echo "${i}" em vez de echo ${i} para a expansão de $i não estar sujeito à divisão de palavras (e assim dependente de $IFS ).

    
por 07.04.2017 / 09:48
1

alternativa, você pode usar o comando seq

$ seq -f "%02g" 8 10
08
09
10
    
por 07.04.2017 / 09:32