ในสคริปต์ทุบตีฉันได้รับจากโปรแกรมเมอร์คนอื่นบางบรรทัดมีความยาวเกิน 80 คอลัมน์ อะไรคืออักขระหรือสิ่งที่จะเพิ่มในบรรทัดเพื่อระบุว่าบรรทัดต่อไปในบรรทัดถัดไป?
ในสคริปต์ทุบตีฉันได้รับจากโปรแกรมเมอร์คนอื่นบางบรรทัดมีความยาวเกิน 80 คอลัมน์ อะไรคืออักขระหรือสิ่งที่จะเพิ่มในบรรทัดเพื่อระบุว่าบรรทัดต่อไปในบรรทัดถัดไป?
คำตอบ:
อักขระเป็นเครื่องหมายแบ็กสแลช \
จากคู่มือทุบตี :
อาจใช้อักขระแบ็กสแลช "\" เพื่อลบความหมายพิเศษสำหรับอักขระถัดไปที่อ่านและสำหรับความต่อเนื่องของบรรทัด
^M
. ปัญหาดูเหมือนจะเป็นสคริปต์ที่มอบให้กับฉันโดยคนที่ใช้ windows dos2unix
แก้ไขได้อย่างรวดเร็ว:)
โดยทั่วไปคุณสามารถใช้แบ็กสแลชที่ท้ายบรรทัดเพื่อให้คำสั่งดำเนินต่อไปยังบรรทัดถัดไป อย่างไรก็ตามมีบางกรณีที่คำสั่งต่อเนื่องโดยปริยายกล่าวคือเมื่อบรรทัดลงท้ายด้วยโทเค็นที่ไม่สามารถยุติคำสั่งได้ตามกฎหมาย ในกรณีนี้เชลล์จะรู้ว่ากำลังจะมีมากขึ้นและสามารถละแบ็กสแลชได้ ตัวอย่างบางส่วน:
# In general
$ echo "foo" \
> "bar"
foo bar
# Pipes
$ echo foo |
> cat
foo
# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
แตกต่างกัน แต่เกี่ยวข้องกันคือความต่อเนื่องโดยปริยายภายในเครื่องหมายคำพูด ในกรณีนี้หากไม่มีแบ็กสแลชคุณเพียงแค่เพิ่มบรรทัดใหม่ลงในสตริง
$ x="foo
> bar"
$ echo "$x"
foo
bar
ด้วยแบ็กสแลชคุณจะแยกบรรทัดตรรกะออกเป็นหลายบรรทัดตรรกะอีกครั้ง
$ x="foo\
> bar"
$ echo "$x"
foobar
[[
- ]]
สภาพ แต่ไม่ได้อยู่ในคนอื่น ๆ และฉันพยายามที่จะคิดออกกฎ
\
ทำงาน คำตอบของ @ Guillaume และความคิดเห็นของ @ George ตอบคำถามนี้อย่างชัดเจน ที่นี่ฉันจะอธิบายว่าทำไมThe backslash has to be the very last character before the end of line character.
พิจารณาคำสั่งนี้:
mysql -uroot \ -hlocalhost
หากมีช่องว่างหลังจาก\
นั้นความต่อเนื่องของบรรทัดจะไม่ทำงาน เหตุผลก็คือ\
ลบความหมายพิเศษสำหรับอักขระถัดไปซึ่งเป็นช่องว่างไม่ใช่อักขระฟีดบรรทัดที่มองไม่เห็น อักขระฟีดบรรทัดอยู่หลังช่องว่างที่ไม่\
อยู่ในตัวอย่างนี้