ฉันพยายามพิมพ์-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'
-ngrep '^-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"ไม่ได้เพราะการทำงานจะใช้เป็นพารามิเตอร์สำหรับ-necho
ป.ล.ทางออกที่ดีที่สุดคือ 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 สะดวกในการทดสอบ) หรือไม่?