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.