He iterado sobre los números en varios orden. Puedo mostrarlos en orden creciente, incluso con pasos como:
$ seq --separator="," 1 10
1,2,3,4,5,6,7,8,9,10
$ seq --separator="," 1 2 10
1,3,5,7,9
También puedo mostrarlos en orden inverso, ni continuo ni paso a paso.
$ seq --separator="," 10 1
$ seq --separator="," 10 2 1
No hay salida para los comandos anteriores.
Los detalles de mi caparazón:
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Avíseme cómo podría mostrar los números en orden descendente.
command-line
seq
mtk
fuente
fuente
seq
es una herramienta completamente no estándar y no hay garantía de que ninguna de las dos implementaciones sea la misma. Si necesita escribir un bucle que itera hacia atrás sobre los números en bash, usefor ((i=$max;i>=0;i--)) …
o similares.Respuestas:
usar incremento negativo
fuente
En general, usted no desea utilizar
seq
, no es portátil (incluso entre los entornos estándar de Linux). Si estás usando ksh, zsh, o bash4 +, puede utilizar la expansión de llaves:fuente
seq
es estándar y luego usas la expansión de llaves solo bash-4. ;)seq
no lo hace.Otra forma en puro bash, ksh o zsh:
Una manera pura de POSIX sh:
fuente
for
La segunda expresión debería ser la prueba y la tercera el paso.Ahora, los POSIX estándar:
(Curiosamente, con
mawk
(y en menor medidagawk
también) mucho más rápido que GNUseq
eni = 10000000
lugar dei = 10
)O
(solo sería más eficiente con un pequeño número de iteraciones, especialmente con
bash
)O
(lo que admitiría números de cualquier tamaño, pero tenga en cuenta que más allá de un cierto número de dígitos (números mayores que 10 70 en la ubicación POSIX al menos), las líneas se incluirán con barras invertidas)
fuente
BC_LINE_LENGTH=0
el entorno. No hay tanta suerte en otras implementaciones.s=$s,$i
o llamarecho -n
/echo \c
/printf
?Puede invertir el orden usando
tac
(cat in reverse). Incluso siseq
se comportara de manera diferente en varios sistemas, creo que lo siguiente debería ser lo más portátil posible:fuente
Probar con:
Ejemplo:
$ seq 10 -1 1
fuente