ในระยะสั้นใช้:
- คำหลักที่ไม่ได้ยกมา heredoc เช่น
EOF
- ถ่านดอลลาร์ปกติสำหรับตัวแปรด้านนอก (เช่นในท้องถิ่น ) เช่น
$FOO
- ตัวละครดอลลาร์หนีเหรียญสำหรับตัวแปรภายใน (เช่นระยะไกล ) เช่น
\$BAR
หากคุณปล่อยคำสำคัญ heredoc (เช่นEOF) unquote ดังนั้นเนื้อหาของ heredoc จะถูกประมวลผลแบบโลคัลดังนั้นจึง$FOOถูกขยายfooและBARขยายเป็นสตริงว่าง จากนั้นsshคำสั่งของคุณจะกลายเป็น:
BAR="bar"
echo "FOO=foo"
echo "BAR="
หากคุณอ้างอิงคำสำคัญ heredoc การขยายตัวแปรจะถูกระงับดังนั้นsshคำสั่งของคุณจะกลายเป็นสิ่งนี้แทน:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
เนื่องจากFOOอาจจะไม่ได้กำหนดไว้ในสภาพแวดล้อมเปลือกระยะไกล, การแสดงออก"FOO=$FOO"ได้รับการประเมินเป็น"FOO=''"เช่นFOOถูกตั้งค่าเป็นสตริงที่ว่างเปล่า
หากคุณต้องการใช้ทั้งสองตัวแปรคุณจะต้องปล่อยให้คำหลัก heredoc ไม่ได้มีการประกาศไว้ดังนั้นการขยายตัวของตัวแปรจะเกิดขึ้นสำหรับตัวแปรที่กำหนดไว้ในเครื่องแล้วหนี (ด้วยเครื่องหมายแบ็กสแลช) ตัวแปรที่คุณต้องการขยายจากระยะไกลเช่น :
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
ในกรณีนี้คำสั่ง ssh ของคุณ (ตามที่ได้รับจากเซิร์ฟเวอร์ระยะไกล) จะเป็นดังนี้:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"