ความแตกต่างระหว่างการใช้คืออะไร
echo -e "Hello\nWorld"
และ
echo $"Hello\nWorld"
ไม่เอาท์พุททั้งสอง:
Hello
World
echo $'Hello\nWorld'
ซึ่งจะพิมพ์ออกมาสองบรรทัดภายใต้การทุบตี
ความแตกต่างระหว่างการใช้คืออะไร
echo -e "Hello\nWorld"
และ
echo $"Hello\nWorld"
ไม่เอาท์พุททั้งสอง:
Hello
World
echo $'Hello\nWorld'
ซึ่งจะพิมพ์ออกมาสองบรรทัดภายใต้การทุบตี
คำตอบ:
echo -e
และecho $'...'
ทั้งสองมีความคล้ายคลึงกันในการที่พวกเขาสนับสนุนลำดับการหลบหนีต่อไปนี้:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
พวกเขามีความแตกต่าง นอกเหนือจากด้านบนแล้วยังecho -e
รองรับ:
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
ตรงกันข้าม$'....'
สนับสนุน:
\' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \cx a control-x character
สังเกตว่าระหว่างสอง\c
ส่วนขยายนั้นใช้ร่วมกันไม่ได้:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
สำหรับecho -e
ข้างต้นยับยั้งการส่งออกต่อไปจึงไม่สนใจ\c
Istop
ในทางตรงกันข้ามสำหรับ$'...'
การ\cI
ถูกตีความว่าเป็นแท็บ
$"..."
ตรงกันข้ามกับ$'...'
ฟังก์ชั่นของ$"..."
มันแตกต่างกันมาก มันจะทำให้สตริงมันมีการแปลตามสถานที่ปัจจุบัน
echo -e
โต้เถียงecho -e
เชลล์ไม่ได้รับการสนับสนุนอย่างกว้างขวางและหลายคนมองว่า-e
ตัวเลือกเป็นความผิดพลาดในการออกแบบ สังเกต:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
อย่างที่คุณเห็นหากสิ่งที่คุณกำลังพิมพ์ด้วยการecho
เริ่มต้นด้วยเส้นประผลลัพธ์อาจไม่คาดคิด ถ้าคุณไม่แน่ใจว่าสตริงแรกที่คุณจะพิมพ์ด้วยecho
ไม่เริ่มต้นด้วยเส้นประคุณน่าจะใช้งานprintf
ได้ดีกว่า
ด้วยเหตุผลเหล่านี้มาตรฐาน POSIX จึงสรุป :
แอปพลิเคชันใหม่ได้รับการสนับสนุนให้ใช้ printf แทน echo
เจตน์ราเมย์ผู้ดำรงรักษาไว้bash
22 ปีที่ผ่านมาเห็นด้วย :
[N] รหัส ew ควรใช้ printf
*
) echo
ไม่ได้เฉพาะเจาะจงจริง มันเกิดขึ้นที่มีคำสั่งใด ๆ ที่ตระหนักสั้นหรือยาวตัวเลือก (เขียนในลักษณะดั้งเดิม) และใช้ตัวถูกดำเนินการชื่อไฟล์รวมทั้ง ls
เนื้อหาสถานการณ์เป็นเล็ก ๆ น้อย ๆ ที่เลวร้ายยิ่งมีecho
ตั้งแต่ (เป็นแหล่งที่มาของคุณกล่าวถึง) echo
ไม่ได้มักจะยอมรับที่จะบ่งบอกถึงการสิ้นสุดของตัวเลือกในขณะที่หนึ่งสามารถเขียนคำสั่งเช่น--
ls -- *l
(และจริงๆแล้วเราควรเขียนคำสั่งด้วยวิธีนี้เมื่อใช้ globs ที่ขึ้นต้นด้วย*
หรือ-
โดยเฉพาะอย่างยิ่งในสคริปต์)
\n
ลำดับหนีดังนั้นในความเป็นจริงมันไม่สำคัญว่าถ้าผมใช้echo -e '...'
, echo $'...'
หรือecho $"..."
Hello\nWorld
สอง คุณต้องใช้-e
สวิตช์เพื่อแปลอักขระการหลบหนี