Questo è il risultato di uno dei miei commenti a questa domanda sull'uso di bc nello scripting della shell. bc inserisce interruzioni di riga in grandi numeri, ad esempio:
> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456
Ma nota che non sono realmente interruzioni di riga nella variabile, o almeno non ci sono se viene utilizzata senza virgolette. Ad esempio, scherzando con più pipe nel compito, ad esempio:
num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')
Mi sono reso conto che mentre c'è davvero un \n nel bc output, controllando echo $num > tmp.txt con hexdump mostra il \n (ASCII 10) è diventato definitivamente uno spazio (ASCII 32) nell'assegnazione delle variabili.
O almeno, nell'output di $num > senza virgolette . Perché?
Come fa notare fedorqui, se usi le virgolette:echo "$num" , ottieni di nuovo le nuove righe. Ciò è evidente esaminando la differenza tra echo $num > tmp.1 e echo "$num" > tmp.2 con dump esadecimale; il primo contiene \ (spazio barra rovesciata) mentre il successivo contiene \\n (barra rovesciata nuova riga).
Risposta accettata:
echo inserisce uno spazio tra ogni due argomenti. La shell considera la nuova riga in $num solo un separatore di parole (proprio come lo spazio).
lines="a
b
c"
set -x
echo $lines # several arguments to echo
echo "$lines" # one argument to echo
Vedi questa risposta (dallo stesso OP) per una spiegazione più dettagliata.