ฉันพยายามพิมพ์-n
โดยใช้echo
คำสั่ง แต่ถ้าฉันเพียงพิมพ์echo -n
มันจะออกบรรทัดใหม่เท่านั้นไม่แสดงขึ้นมา-n
แต่มันจะออกบรรทัดใหม่
getopt
(???) ในการแยกวิเคราะห์บรรทัดคำสั่ง
ฉันพยายามพิมพ์-n
โดยใช้echo
คำสั่ง แต่ถ้าฉันเพียงพิมพ์echo -n
มันจะออกบรรทัดใหม่เท่านั้นไม่แสดงขึ้นมา-n
แต่มันจะออกบรรทัดใหม่
getopt
(???) ในการแยกวิเคราะห์บรรทัดคำสั่ง
คำตอบ:
ปัญหาคือecho
การตีความ-n
ว่าเป็นข้อโต้แย้ง ในการใช้งานทุบตีเริ่มต้นนั่นหมายถึง (จากhelp echo
):
-n do not append a newline
มีหลายวิธีในการแก้ไข:
ทำให้เป็นสิ่งที่ไม่มีตัวเลือกโดยรวมอักขระอื่น ตัวอย่างเช่นecho
อย่าบอกให้พิมพ์บรรทัดใหม่ด้วย-n
แล้วบอกให้ตีความเครื่องหมายทับขวาด้วย-e
และเพิ่มบรรทัดใหม่อย่างชัดเจน
$ echo -ne '-n\n'
-n
หรือเพียงแค่รวมช่องว่าง
$ echo " -n"
-n
อย่างไรก็ตามนั้นเพิ่มพื้นที่ซึ่งคุณอาจไม่ต้องการ
ใช้อักขระที่ไม่ได้พิมพ์ก่อนหน้า ที่นี่ ฉันใช้แบ็คสเปซ ( \b
)
$ echo -e "\b-n"
-n
นอกจากนี้ยังเพิ่มอักขระพิเศษที่คุณอาจไม่ต้องการ
ใช้เล่ห์เหลี่ยม
$ echo n- | rev
-n
rev
คำสั่งก็จะพิมพ์ผลลัพธ์ที่ได้ตรงกันข้าม
ใช้เครื่องมือที่เหมาะสมสำหรับงาน
$ printf -- '-n\n'
-n
grep '^-n'
โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะแยกมันและพยายามบางอย่างเช่น pritnf
เป็นวิธีที่จะไปจริงๆ
printf
จะดีกว่าอยู่แล้ว echo
แต่คำถามที่เกี่ยวกับการเป็นเพียงแค่
echo -e "-n\c"
จะทำสิ่งที่แน่นอน
\c
ถูกระงับเอาต์พุตเพิ่มเติม
บางครั้งควรใช้เครื่องมือที่เหมาะสม คุณสามารถใช้printf
แทน:
% printf "-n\n"
-n
echo
ในขณะที่printf
เป็นมาตรฐานที่ดีขึ้น
คุณสามารถใช้คำสั่งนี้ แต่มันเพิ่มพื้นที่พิเศษ
echo -e "\r-n"
นี่เป็นแฮ็คชนิดหนึ่ง
-e
เปิดใช้งานสัญลักษณ์คำสั่งแบ็กสแลช
\r
คือการคืนสินค้า
จริง ๆ แล้ว\
อักขระที่ถูกต้องจะทำในสถานที่ใด ๆ ของสตริง
help echo
คุณสามารถดูว่าถูกต้องโดย
echo "-n"
ไม่ได้เพราะการทำงานจะใช้เป็นพารามิเตอร์สำหรับ-n
echo
ป.ล.ทางออกที่ดีที่สุดคือ IMHO
echo -e "-n\c"
มันไม่ได้เพิ่มตัวละครพิเศษใด ๆ
echo -e "-n\n"
พิมพ์เหมือนกัน แต่ด้วยอักขระบรรทัดใหม่
-n
ถูกต้อง-nfoo
ไม่ใช่เพื่อที่จะพิมพ์
man echo
ก็มีเหมือนกัน แต่help
ดีกว่านิดหน่อย
/bin/echo
เป็นสิ่งที่แตกต่างอย่างสิ้นเชิงและเมื่อคุณทำงานecho
ในทุบตีคุณจะได้รับ builtin ซึ่งอาจแตกต่างกันมากขึ้นอยู่กับเปลือกของคุณ
ฉันคิดว่าถ้าคุณต้องการใช้อย่างแน่นอนecho
เท่านั้นสิ่งนี้จะทำให้คุณพึงพอใจ:
echo "-n "
งานนี้เพราะในขณะที่ยัง-n
เป็นตัวเลือกที่ถูกต้องสำหรับecho
, -n
มีพื้นที่หลังจากที่มันไม่ได้เป็น เนื่องจากไม่ใช่ตัวเลือกให้echo
พิมพ์ออกมา
พวกคุณคิดมากจริง ๆ
echo -e \\055n
หรือไม่ขึ้นบรรทัดใหม่
echo -en \\055n
printf "-n\n"
คิดมากเป็นอย่างไร
/bin/echo
อย่างน้อยถ้าเรียกว่าเป็นecho -e "\055n"
ที่จะขยาย @ คำตอบ AB เป็นวิธีเดียวที่พกพาไปใช้งานecho
คือการละเว้นจากการใช้ตัวเลือกใด ๆ -n
เช่น พิจารณาใช้printf
แทนหากมี หน้าอ้างอิงนี้ให้รายละเอียดเพิ่มเติมและอธิบายได้เป็นอย่างดีเมื่อใดและอย่างไรecho
และprintf
ควรจะใช้:
ทุกวันนี้ echo (1) สามารถพกพาได้ก็ต่อเมื่อคุณไม่ใช้ค่าสถานะและลำดับการยกเว้น ใช้ printf (1) แทนหากคุณต้องการมากกว่าข้อความธรรมดา
ใน Bash script คุณสามารถเรียกใช้:
echo -n -
echo n
หรือในเปลือก interacive:
echo -n - ; echo n
นี่echo
คือ-
ตัวละครและn
ตัวละคร
-pilot6@Pilot6:~$
ผลคำสั่งแรก n
เอาท์พุทที่สอง
&&
- ฉันจะไม่พูดคำตอบนี้เป็นที่ไม่ถูกต้อง
อีกสามวิธี:
$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
คุณสามารถเรียกใช้
printf -n;echo
ผ่านการทดสอบใน Busybox Ash
ash
เป็นชื่อของ Almquist Shell
echo -n -- -n
งานได้ (ไม่มีกล่อง linux สะดวกในการทดสอบ) หรือไม่?