คุณจะหนีจากตัวละครใน heredoc ได้อย่างไร?


22

ฉันทำงานกับสคริปต์ทุบตีที่พยายามหยุดไม่ให้พยายามแทนที่ตัวแปรภายใน heredoc ของฉัน จะตั้งค่า heredoc ให้เป็น A) ยกเว้นชื่อตัวแปรแทนที่จะทำการแยกวิเคราะห์หรือ B) คืนค่าสตริงทั้งหมดที่ไม่ถูกแตะต้อง?

cat > /etc/nginx/sites-available/default_php <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/$host; <--- $host is a problem child
}
END

ตามที่เป็นเมื่อฉันเสร็จสิ้นการฉีดมันลงในไฟล์ฉันเหลือกับนี้

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}

คำตอบ:


33

จากbash(1)หน้าคน:

หากอักขระใด ๆ ในคำถูกยกมา ตัวคั่นเป็นผลมาจากการลบคำพูดในคำและบรรทัดในที่นี่เอกสารจะไม่ขยาย

cat > /etc/nginx/sites-available/default_php <<"END"

3
+1 การหนี "ขีด จำกัด " ยังใช้งานได้ ( \END) ดูเพิ่มเติมtldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

คำพูดเดียวทำงานเกินไป
Joao Costa

กลไกเดียวกันทำงานได้กับ Korn เชลล์ (ksh)
jhfrontz

19

เพียงแค่ใช้แบ็กสแลช:

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END

คุณรู้วิธีปิดการใช้งานการฉีดค่าตัวแปรโดยไม่ต้องหลบหนีหรือไม่?
Xeoncross

2
สิ่งที่อิกนาชิโอพูด แต่ฉันไม่รู้เหมือนกัน :)
Halfgaar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.