Ini keluar dari salah satu komentar saya untuk pertanyaan ini mengenai penggunaan bc dalam skrip shell. bc menempatkan jeda baris dalam jumlah besar, mis.:
> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456
Tapi perhatikan mereka tidak benar-benar jeda baris dalam variabel - atau setidaknya tidak ada jika digunakan tanpa tanda kutip. Misalnya, bermain-main dengan lebih banyak pipa dalam tugas, mis.:
num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')
Saya menyadari bahwa meskipun sebenarnya ada \n di bc output, periksa echo $num > tmp.txt dengan hexdump menunjukkan \n (ASCII 10) sudah pasti menjadi spasi (ASCII 32) dalam penugasan variabel.
Atau setidaknya, dalam output $num > yang tidak dikutip . Mengapa demikian?
Seperti yang ditunjukkan fedorqui, jika Anda menggunakan tanda kutip:echo "$num" , Anda mendapatkan baris baru lagi. Ini terbukti dengan memeriksa perbedaan antara echo $num > tmp.1 dan echo "$num" > tmp.2 dengan hexdump; yang pertama berisi \ (spasi garis miring terbalik) sedangkan yang belakangan berisi \\n (garis miring terbalik baris baru).
Jawaban yang Diterima:
echo menempatkan spasi di antara masing-masing dua argumen. Shell menganggap baris baru dalam $num hanya pemisah kata (seperti spasi).
lines="a
b
c"
set -x
echo $lines # several arguments to echo
echo "$lines" # one argument to echo
Lihat jawaban ini (oleh OP sendiri) untuk penjelasan lebih rinci.