Cuando uso lo siguiente, obtengo un resultado como se esperaba:
$ echo {8..10}
8 9 10
¿Cómo puedo usar esta expansión de llaves de una manera fácil para obtener el siguiente resultado?
$ echo {8..10}
08 09 10
Ahora sé que esto se puede obtener usando seq
(no lo intenté), pero eso no es lo que estoy buscando.
La información útil puede ser que estoy restringido a esta versión bash. (Si tiene una zsh
solución, pero no tiene bash
solución, compártala también)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
bash
arithmetic
brace-expansion
Bernhard
fuente
fuente
Respuestas:
Prefije el primer número con a
0
para forzar que cada término tenga el mismo ancho.Desde la sección de la página de manual de bash sobre Expansión de Brace:
También tenga en cuenta que puede usar
seq
la-w
opción para igualar el ancho rellenando con ceros a la izquierda:Si desea más control, incluso puede especificar un formato de estilo printf:
fuente
echo {08..10}
Sin embargo, después de enterarse de la solución, solo se presenta para bash versión 4 y superior.perl
), un cero inicial indica un número octal. Supongo que no es frecuente que desee una secuencia de números octales ...seq
con el-w
interruptor de la siguiente manera:seq -w 003
produce los números 001, 002 y 003.foo_00001.someextension
donde casi todos los contextos de ordenación proporcionen una ordenación sensata.si usas printf
esto forzará a ser 2 caracteres y agregará un 0. inicial. En caso de que necesite 3 dígitos, puede cambiar a "% .3d".
fuente
printf
solución, pero en realidad no está facilitando esto. Espero que haya algún truco oculto que haga el trabajo :)Use un rango que comience con un dígito constante y elimine ese dígito:
o sin usar un comando externo:
Para usar en un bucle for:
aunque para este caso un ciclo while sería más claro y funciona en cualquier shell POSIX:
fuente
for
bucle de todos modos.Tengo la misma versión bash del póster original (
GNU bash, version 3.2.51(1)-release
) y{08..12}
no funciona para mí, pero lo siguiente sí:Es un poco más tedioso, pero funciona en la versión OP de bash (y versiones posteriores, supongo).
fuente
Como referencia, creo que el ancho fijo automático solo ocurre con la última versión de bash:
fuente
los ceros, ini y fin son vars, así que es fácil, solo escribes ceros que digas en 'ceros' para que ini fin sin problemas;)
fuente