ฉันมีสตริงหลายบรรทัดนี้ (รวมคำพูด):
abc'asdf"
$(dont-execute-this)
foo"bar"''
ฉันจะกำหนดให้ตัวแปรโดยใช้ heredoc ใน Bash ได้อย่างไร
ฉันต้องการรักษาบรรทัดใหม่
ฉันไม่ต้องการที่จะหลบหนีตัวละครในสตริงที่จะน่ารำคาญ ...
"EOF"
ตัวแปรแบบ double-qouted หากเรียกผ่านeval $VAR
จะทำให้สคริปต์ที่เหลือทั้งหมดถูกคอมเม้นต์เนื่องจากที่นี่ $ VAR จะถูกมองเป็นบรรทัดเดียว ; เพื่อให้สามารถใช้#
ความคิดเห็นทุบตีในสคริปต์หลายบรรทัด, เครื่องหมายคำพูดคู่ยังตัวแปรในeval call:
eval "$ VAR" `
eval
วิธีนี้ แต่ไม่ได้ติดตามเพราะมันเป็นส่วนหนึ่งของแพคเกจที่eval
ตัวแปรบางอย่างที่กำหนดไว้ในมันเป็นไฟล์ config /usr/lib/network/network: eval: line 153: syntax error: unexpected end of file
เกิดข้อผิดพลาดคือ: ฉันเพิ่งเปลี่ยนไปใช้โซลูชันอื่น
'EOF'
ด้วย` in the content: if the second line has
คำสั่งlinebreaks ที่มีการEscape ด้วยคำสั่ง cd` ฉันจะกลับมา: " .sh: line X: cd: command not found "; แต่ถ้าฉันพูดสองครั้ง"EOF"
; ดังนั้นตัวแปร bash${A}
จะไม่ได้รับการเก็บรักษาไว้เป็นสตริง (จะถูกขยาย) แต่แล้วตัวแบ่งบรรทัดจะถูกเก็บรักษาไว้ - และฉันไม่มีปัญหาในการเรียกใช้คำสั่งด้วยcd
ในบรรทัดที่สอง ( และ 'EOF' และ "EOF" ดูเหมือนจะเล่นได้ดีเช่นกันeval
สำหรับการเรียกใช้ชุดคำสั่งที่เก็บไว้ใน ตัวแปรสตริง ) ไชโย!