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.