Bisakah seseorang menjelaskan apa yang terjadi di balik layar dalam karakter melarikan diri di shell Linux? Saya mencoba yang berikut ini dan sering googled, tanpa berhasil memahami apa (dan bagaimana) yang terjadi:
root@sv01:~# echo -e "\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\\ Hello!"
\\\ Hello!
root@sv01:~# echo -e "\n Hello!"
Hello!
root@sv01:~# echo -e "\\n Hello!"
Hello!
root@sv01:~# echo -e "\\\n Hello!"
\n Hello!
Saya benar-benar tersesat di sana, jadi misalnya, mengapa tiga garis miring terbalik hanya memberikan satu tebasan belakang? Saya berharap: dua yang pertama akan lolos ke satu, yang ketiga tidak akan menemukan apa pun untuk melarikan diri sehingga akan tetap menjadi garis miring (garis dalam percobaan pertama), tetapi yang terjadi adalah bahwa yang ketiga hilang begitu saja.
Mengapa saya mendapatkan satu backslash dari empat \\\\ Hello
? Saya berharap setiap pasangan akan memberikan satu tebasan -> dua garis miring terbalik.
Dan mengapa saya perlu tiga backslash dalam kasus terakhir untuk bisa lolos? apa yang terjadi di latar belakang melarikan diri untuk mendapatkan itu? dan apa bedanya dengan \\n
case?
Saya menghargai penjelasan apa pun yang terjadi di baris sebelumnya.
echo -e
tidak aman: echo
akan berperilaku sesuai dengan standar jika keduanya posix
dan xpg_echo
opsi runtime diaktifkan, atau jika dikompilasi dengan opsi waktu-bangun yang setara. Praktik yang aman adalah menggunakan printf
sebagai gantinya - lihat bagian APLIKASI PENGGUNAAN dan RATIONALE dari tautan di atas yang menjelaskan cara menjadikan printf
tindakan sebagai pengganti echo
.
echo -e
perilaku bukanlah standar yang ditentukan - lihat pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . Keluaran sepenuhnya ditentukan oleh implementasi jika ada backslash literal di mana saja dalam input, dan satu-satunya opsi yang diizinkan adalah-n
(artinya implementasi yang sesuai standar akanecho -e
mencetak-e
pada outputnya).