Apa perbedaan antara menggunakan
echo -e "Hello\nWorld"
dan
echo $"Hello\nWorld"
bukankah keduanya menghasilkan:
Hello
World
command-line
bash
Menandai
sumber
sumber
Hello\nWorld
. Anda memerlukan-e
sakelar untuk menafsirkan karakter pelarian.echo $'Hello\nWorld'
,, yang akan dicetak pada dua baris di bawah bash.Jawaban:
echo -e
danecho $'...'
keduanya serupa dalam hal mereka mendukung urutan pelarian berikut:Mereka memang memiliki perbedaan. Selain yang di atas,
echo -e
mendukung:Sebaliknya,
$'....'
mendukung:Perhatikan bahwa, di antara keduanya,
\c
ekstensi tidak kompatibel:Untuk di
echo -e
atas,\c
menekan output lebih lanjut, dengan demikian mengabaikanIstop
. Sebaliknya, untuk$'...'
,\cI
ditafsirkan sebagai tab.Bentuk yang serupa secara visual:
$"..."
Sebaliknya
$'...'
, fungsinya$"..."
sangat berbeda. Ini akan menyebabkan string yang dikandungnya diterjemahkan sesuai dengan lokal saat ini.The
echo -e
kontroversiecho -e
tidak didukung secara universal oleh cangkang dan banyak yang menganggap-e
opsi ini sebagai kesalahan desain. Mengamati:Seperti yang Anda lihat, jika apa yang Anda cetak
echo
dimulai dengan tanda hubung, hasilnya bisa tidak terduga. Kecuali Anda yakin bahwa string pertama yang akan Anda cetakecho
tidak dimulai dengan tanda hubung, Anda kemungkinan besar akan lebih baik menggunakanprintf
.Karena alasan ini, standar POSIX menyimpulkan :
Chet Ramey, yang telah bertahan
bash
selama 22 tahun terakhir, setuju :sumber
printf
daripadaecho
*
) sebenarnya tidak khusus untukecho
. Itu terjadi dengan perintah apa pun yang mengenali opsi pendek atau panjang (ditulis dengan cara tradisional) dan mengambil nama file operan, termasukls
. Bisa dibilang situasinya sedikit lebih buruk denganecho
karena (seperti sumber Anda sebutkan)echo
biasanya tidak menerima--
untuk menunjukkan akhir opsi, sedangkan orang dapat menulis perintah sepertils -- *l
. (Dan seseorang harus menulis perintah seperti itu, ketika menggunakan gumpalan yang dimulai dengan*
atau-
, terutama dalam skrip.)\n
urutan escape, sehingga sebenarnya tidak masalah jika saya menggunakanecho -e '...'
,echo $'...'
atauecho $"..."