
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 bash
em 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 bash
para 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 zsh
de onde vem essa sintaxe.
zsh
tem suporte {08..10}
desde 1995 (introduzido em 2.6-beta4), portanto estará disponível em zsh
qualquer versão do CentOS (primeiro lançamento do CentOS em 2004).
Na verdade, você usou zsh
sintaxe em seu exemplo, pois bash
precisa echo "${i}"
, em vez de, echo ${i}
para a expansão de $i
não estar sujeito à divisão de palavras (e, portanto, dependente de $IFS
).
Responder3
alternativa, você pode usar seq
o comando
$ seq -f "%02g" 8 10
08
09
10