Contoh berikut menunjukkan bahwa baris baru ditambahkan ke string di sini .
Mengapa ini dilakukan?
xxd -p <<<'a'
# output: 610a
xxd -p <<<'a
'
# output: 610a0a
sumber
Contoh berikut menunjukkan bahwa baris baru ditambahkan ke string di sini .
Mengapa ini dilakukan?
xxd -p <<<'a'
# output: 610a
xxd -p <<<'a
'
# output: 610a0a
Jawaban yang mudah adalah karena ksh ditulis seperti itu (dan bash kompatibel). Tapi ada alasan untuk pilihan desain itu.
Sebagian besar perintah mengharapkan input teks. Di dunia unix, file teks terdiri dari urutan baris, masing-masing berakhir pada baris baru . Jadi, dalam kebanyakan kasus, baris akhir final diperlukan. Kasus yang sangat umum adalah untuk mengambil output dari perintah dengan susbtitusi perintah, memprosesnya dengan cara tertentu, kemudian meneruskannya ke perintah lain. Substitusi perintah menghapus baris baru; <<<
menempatkan satu kembali.
tmp=$(foo)
tmp=${tmp//hello/world}
tmp=${tmp#prefix}
bar <<<$tmp
Bash dan ksh toh tidak bisa memanipulasi data biner (tidak bisa mengatasi karakter nol), jadi tidak mengherankan bahwa fasilitas mereka diarahkan untuk data teks.
<<<
Sintaks di sini-string sebagian besar hanya untuk kenyamanan, seperti <<
dokumen-dokumen di sini. Jika Anda tidak perlu menambahkan baris baru final, gunakan echo -n
(dalam bash) atau printf
dan saluran pipa.
<<<
diperkenalkan ke dunia Bourne olehzsh
, bukanksh
. Dan itu terinspirasi oleh operator serupa di port Unixrc
yang tidak menambahkan karakter baris baru tambahan. Menariknya,=(<<<text)
operator tidak menambahkan baris baru itu dizsh
.printf
, dll) menghindari baris baru tailingbash
? Seperti @ StéphaneChazelas runcing dimungkinkan dizsh
.Salah satu skenario di mana praktis untuk memiliki baris baru ditambahkan ke sini-string adalah ketika menggunakan
read
perintah ketikaset -e
mode aktif. Ingat bahwaset -e
menyebabkan skrip berakhir ketika (lebih atau kurang) menemukan pernyataan yang menghasilkan kode status tidak nol. Pertimbangkan yangread
menghasilkan kode status non-nol ketika menemukan string tanpa baris baru:sumber
Saya pikir itu satu-satunya cara untuk mendapatkan baris baru di akhir-string di sini, bukti:
Akan terlihat bahwa operator di sini-string menghapus baris baru kecuali mereka diberikan dalam sintaks yang Anda kirimkan.
sumber
xxd <<<$(echo a)
.