บางคนสามารถอธิบายสิ่งที่เกิดขึ้นเบื้องหลังในการหลบหนีของตัวละครในเปลือก Linux? ฉันลองทำสิ่งต่อไปนี้และใช้ Google เป็นจำนวนมากโดยไม่ประสบความสำเร็จในการทำความเข้าใจว่าเกิดอะไรขึ้น (และอย่างไร):
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!
ฉันหลงทางอยู่ที่นั่นเช่นเหตุใดเครื่องหมายแบ็กสแลชสามรายการจึงให้แบ็กสแลชเดียว ฉันคาดหวังว่า: สองคนแรกจะถูกหลบหนีไปหนึ่งอันที่สามจะไม่พบสิ่งใดที่จะหลบหนีดังนั้นมันจะยังคงเป็นเครื่องหมายทับ (บรรทัดในการทดสอบครั้งแรก) แต่สิ่งที่เกิดขึ้นคือสิ่งที่สามกำลังจะหายไป
ทำไมฉันได้รับหนึ่งทับขวาจากสี่\\\\ Hello
? ฉันคาดว่าแต่ละคู่จะให้แบ็กสแลชหนึ่งอัน -> แบ็กสแลชสองตัว
และทำไมฉันต้องมีแบ็กสแลชสามครั้งในกรณีที่ผ่านมาเพื่อ \ n หลบหนี เกิดอะไรขึ้นในพื้นหลังของการหลบหนีเพื่อรับสิ่งนั้น และมันแตกต่างจาก\\n
กรณีอย่างไร
ฉันขอขอบคุณคำอธิบายใด ๆ ของสิ่งที่เกิดขึ้นในบรรทัดก่อนหน้า
echo -e
ไม่ปลอดภัย: echo
จะทำงานตามมาตรฐานหากเปิดใช้งานทั้งตัวเลือกposix
และxpg_echo
ตัวเลือกรันไทม์หรือหากคอมไพล์ด้วยตัวเลือกการสร้างเวลาที่เทียบเท่ากัน การปฏิบัติที่ปลอดภัยคือการใช้printf
แทน - ดูการใช้โปรแกรมประยุกต์และเหตุผลส่วนของการเชื่อมโยงดังกล่าวข้างต้นอธิบายถึงวิธีการที่จะทำให้การทำหน้าที่แทนสำหรับprintf
echo
echo -e
พฤติกรรมที่ไม่ได้มาตรฐานที่กำหนดไว้ แต่อย่างใด - ดูpubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html การส่งออกจะสมบูรณ์การดำเนินงานที่กำหนดไว้ว่ามีที่ใดก็ได้ทับขวาตัวอักษรในปัจจัยการผลิตและตัวเลือกที่ได้รับอนุญาตเท่านั้น-n
(หมายถึงว่าการดำเนินงานตามมาตรฐานจะมีecho -e
การพิมพ์-e
ในการส่งออกของมัน)