GNU/Linux >> Tutoriales Linux >  >> Linux

¿Transformación automática de nuevas líneas en la asignación de variables de Shell?

Esto surgió de uno de mis comentarios a esta pregunta sobre el uso de bc en secuencias de comandos de shell. bc pone saltos de línea en números grandes, por ejemplo:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456

Pero tenga en cuenta que en realidad no son saltos de línea en la variable, o al menos no los hay si se usa sin comillas. Por ejemplo, al jugar con más tubería en la tarea, por ejemplo:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')

Me di cuenta de que si bien realmente existe un \n en el bc salida, verificando echo $num > tmp.txt con hexdump muestra el \n (ASCII 10) definitivamente se ha convertido en un espacio (ASCII 32) en la asignación de variables.

O al menos, en la salida de $num > sin comillas . ¿Por qué?

Como señala fedorqui, si usa comillas:echo "$num" , obtendrá nuevas líneas de nuevo. Esto es evidente al examinar la diferencia entre echo $num > tmp.1 y echo "$num" > tmp.2 con volcado hexadecimal; el primero contiene \ (barra invertida) mientras que el último contiene \\n (nueva línea de barra invertida).

Respuesta aceptada:

echo pone un espacio entre cada dos argumentos. El shell considera la nueva línea en $num solo un separador de palabras (como un espacio).

lines="a
b
c"
set -x
echo $lines   # several arguments to echo
echo "$lines" # one argument to echo

Consulte esta respuesta (por el propio OP) para obtener una explicación más detallada.


Linux
  1. ¿Almacenar la salida del comando en la variable de Shell?

  2. ¿Es Shell Portable para ejecutar un comando en la misma línea después de la asignación de variables?

  3. ¿La secuencia de comandos de Shell se bloquea en el comando de correo?

  4. Leer valores en una variable de shell desde una tubería

  5. Todas las líneas nuevas se eliminan al guardar la salida cat en una variable

Comando de exportación en Linux explicado

¿Qué es Subshell en Linux?

¿Cómo conservar los saltos de línea al almacenar la salida del comando en una variable?

Iterar sobre la variable $ PATH usando el script de shell

linux shell wc -c cuenta caracteres +1

Shell =Comprobar si la variable comienza con #