Vyplynulo to z jednoho z mých komentářů k této otázce týkající se použití bc ve skriptování shellu. bc zalomí řádky ve velkých číslech, např.:
> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456
Všimněte si však, že se v proměnné ve skutečnosti nejedná o zalomení řádků – nebo alespoň ne, pokud je použita bez uvozovek. Například v dovádění s více trubkami v zadání, např.:
num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')
Uvědomil jsem si, že zatímco ve skutečnosti existuje \n v bc výstup, zaškrtnutím echo $num > tmp.txt s hexdump zobrazuje \n (ASCII 10) se definitivně stala mezerou (ASCII 32) v přiřazení proměnné.
Nebo alespoň ve výstupu neuvedeného $num > . Proč?
Jak zdůrazňuje fedorqui, pokud používáte uvozovky:echo "$num" , znovu získáte nové řádky. To je zřejmé z prozkoumání rozdílu mezi echo $num > tmp.1 a echo "$num" > tmp.2 s hexdumpem; první obsahuje \ (mezera zpětného lomítka), zatímco pozdější obsahuje \\n (obrácené lomítko na novém řádku).
Přijatá odpověď:
echo vloží mezeru mezi každý dva argumenty. Shell bere v úvahu nový řádek v $num jen oddělovač slov (stejně jako mezera).
lines="a
b
c"
set -x
echo $lines # several arguments to echo
echo "$lines" # one argument to echo
Viz tato odpověď (od samotného OP) pro podrobnější vysvětlení.