Conozco el comando seqpara generar una secuencia de enteros, uno por línea, pero me gustaría hacer dos preguntas:
¿Es posible escribir los números de la secuencia en la misma línea?
¿Es posible crear una cadena hecha de la secuencia de números separados por un espacio en blanco?

echo $(seq 1 10)Respuestas:
Con
bash,zshyksh93, puede usar el formulario de expansión de llaves {start..end..step} :fuente
GNU
seqtoma la-sopción separator ( ):fuente
echo $(seq 5)funciona bien.Portátil para todos los shells y cualquier sistema que tenga seq (ya que esta pregunta está etiquetada)
Si inicio es 1:
De otra manera:
Con bc:
En bash
Nota:
Esta solución de eco funciona si el valor de IFS contiene una nueva línea, lo que hace por defecto.
Por defecto, IFS está configurado en la secuencia <espacio><tabla> <nueva línea> . Y se restablece para cada inicio limpio del shell. Pero, si le preocupa que haya cambiado en algún caso extremo, tenemos varias soluciones.
Sin embargo, restablecer el valor de IFS bajo sh puede ser complejo. Lea el detalle completo aquí .
Desarmar IFS.
siempre funcionará Siempre que no haya ningún código a continuación (o scripts secundarios) que necesiten un conjunto IFS, como un script que lo haga
OldIFS="$IFS".Solución correcta
Usando un truco para sh:
fuente
IFS='<space><tab><newline>'cuando los<space>,<tab>,<newline>son los caracteres literales correspondientes.Utilizar esta:
fuente
...o...
Los dos comandos anteriores separarán los enteros por espacios en blanco.
xargsel valor predeterminado es imitar/bin/echoy, por lo tanto, cada número entero está separado por un solo espacio. Sin embargo, tendrá una longitud máxima de línea de comando de 128K. Puedes ajustar esto ...... imprime 1. I el valor
-saquí no es arbitrario: lo obtuve después de probar un valor más alto (que aparentemente funcionó de todos modos) pero luegoxargsimprimí el mensaje útil:pastees una de las dos utilidades sancionadas por POSIX (que yo sepa) para manejar líneas de longitud arbitraria:pasteel valor predeterminado es un delimitador de tabulación, por lo que habrá una tabulación entre cada entero después del segundo comando. Usted puede...... usa el
-dinterruptor eliminador para alterar ese comportamiento,fuente
seq 10 | xargsfunciona bien, pero debido a los límites de la línea de comando,seq 100000 | xargsgenera 5\nlíneas delimitadas (en mi sistema)paste andcut` son las dos utilidades sancionadas por POSIX para trabajar con líneas de longitud arbitraria. Dicho eso,xargs | xargses una opción. O bienseq 100000|tr \\n \$IFSun número? Y enbashsu godawful lento de todos modos. En su respuesta, habla deshque, ni siquiera necesita establecer$IFSen ese contexto, se transmitirá a través del entorno si se configura allí. Y no es más corto de loseq 100000|paste -sque supera su rendimiento 5: 1. Ypasteno viene con ninguna trampa.$IFS, lo uso todo el tiempo, pero no lo uso a menos que lo configure y usted tampoco debería hacerlo. Especialmente no deberías recomendar a extraños al azar que no conocen mejor que deberían hacerlo. No lo deje al azar: es un programa de computadora. Es un error si se comporta inesperadamente, ¿por qué permitir que lo haga?