Karena seperti yang dikatakan manual bash tentang substitusi perintah:
Bash melakukan perluasan dengan menjalankan perintah dan mengganti substitusi perintah dengan output standar dari perintah, dengan setiap baris baru yang tertinggal dihapus.
Jadi, dengan menambahkan \b Anda mencegah penghapusan \n .
Cara yang lebih bersih untuk melakukannya adalah dengan menggunakan $'' mengutip, seperti ini:
IFS=$'\n'
Saya baru ingat cara termudah. Diuji dengan bash di debian wheezy.
IFS="
"
jangan bercanda :)
Ini peretasan karena penggunaan echo dan substitusi perintah.
prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2
$() strip mengikuti baris baru dan \b mencegah \n dari menjadi baris baru yang tertinggal sementara sangat tidak mungkin muncul di teks apa pun. IFS=$'\n' adalah cara yang lebih baik untuk menyetel IFS agar terbagi pada baris baru.