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

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

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 obtive:

8
9
10

Mas quando eu faço isso:

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

Eu obtive:

08
09
10

Mas no servidor ao qual tenho acesso, que executa o CentOS 5.6, a execução de ambos os comandos resulta na mesma saída:

8
9
10

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

Responder1

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

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

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

Alternativamente, algo na linha de

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

também funcionará.

Responder2

Em vez de usar bash, você poderia usar zshde onde vem essa sintaxe.

zshtem suporte {08..10}desde 1995 (introduzido em 2.6-beta4), portanto estará disponível em zshqualquer versão do CentOS (primeiro lançamento do CentOS em 2004).

Na verdade, você usou zshsintaxe em seu exemplo, pois bashprecisa echo "${i}", em vez de, echo ${i}para a expansão de $inão estar sujeito à divisão de palavras (e, portanto, dependente de $IFS).

Responder3

alternativa, você pode usar seqo comando

$ seq -f "%02g" 8 10
08
09
10

informação relacionada