
En mi máquina local, donde ejecuto CentOS 7.2, cuando hago esto:
for i in {8..12}; do echo ${i}; done
Obtuve:
8
9
10
Pero cuando hago esto:
for i in {08..10}; do echo ${i}; done
Obtuve:
08
09
10
Pero en el servidor al que tengo acceso, que ejecuta CentOS 5.6, al ejecutar ambos comandos se obtiene el mismo resultado:
8
9
10
¿Por qué no hay ceros delante del 8 y del 9? ¿Es por la versión de bash o simplemente por la configuración del entorno? ¿Puedo cambiarlo por sesión o de forma permanente, para que mi servidor ponga ese cero delante de los números menores que 10?
Respuesta1
Es probable que bash
en su máquina CentOS 5.6 sea la versión 3. El llenado cero de números enteros en expansiones de llaves se introdujo en la versión 4 de bash
.
La solución sería actualizar su instalación bash
a una versión más reciente o utilizar una forma alternativa de generar números enteros llenos de ceros, como
printf '%02d\n' {8..10}
Alternativamente, algo parecido a
for i in 0{1..9} {10..20}; do
echo "$i"
done
también funcionará.
Respuesta2
En lugar de usar bash
, podrías usar zsh
de dónde viene esa sintaxis.
zsh
ha estado soportando {08..10}
desde 1995 (introducido en 2.6-beta4), por lo que estará disponible en zsh
cualquier versión de CentOS (primera versión de CentOS en 2004).
De hecho, usó zsh
la sintaxis en su ejemplo porque bash
la necesita echo "${i}"
en lugar de echo ${i}
para que la expansión $i
no esté sujeta a la división de palabras (y, por lo tanto, dependa de $IFS
).
Respuesta3
alternativa, puedes usar seq
el comando
$ seq -f "%02g" 8 10
08
09
10