Crear un rango de números del 08 al 10 en bash no incluye 0 delante de números de un dígito

Crear un rango de números del 08 al 10 en bash no incluye 0 delante de números de un dígito

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 bashen 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 basha 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 zshde dónde viene esa sintaxis.

zshha estado soportando {08..10}desde 1995 (introducido en 2.6-beta4), por lo que estará disponible en zshcualquier versión de CentOS (primera versión de CentOS en 2004).

De hecho, usó zshla sintaxis en su ejemplo porque bashla necesita echo "${i}"en lugar de echo ${i}para que la expansión $ino esté sujeta a la división de palabras (y, por lo tanto, dependa de $IFS).

Respuesta3

alternativa, puedes usar seqel comando

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

información relacionada