ฉันมีสตริงหลายบรรทัดนี้ (รวมคำพูด):
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สำหรับการเรียกใช้ชุดคำสั่งที่เก็บไว้ใน ตัวแปรสตริง ) ไชโย!