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.