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 \\ncase?
Saya menghargai penjelasan apa pun yang terjadi di baris sebelumnya.
echo -e tidak aman: echoakan berperilaku sesuai dengan standar jika keduanya posixdan xpg_echoopsi runtime diaktifkan, atau jika dikompilasi dengan opsi waktu-bangun yang setara. Praktik yang aman adalah menggunakan printfsebagai gantinya - lihat bagian APLIKASI PENGGUNAAN dan RATIONALE dari tautan di atas yang menjelaskan cara menjadikan printftindakan sebagai pengganti echo.
echo -eperilaku 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 -emencetak-epada outputnya).