ตัวอย่างรหัสที่สองของคุณ:
ssh remote-server "print $HOST"
localhost
จะถูกตั้งค่าสถานะโดยเครื่องมือShellcheckที่ยอดเยี่ยมด้วยการวินิจฉัยSC2029 :
Bash ขยายการขัดแย้งทั้งหมดที่ไม่ได้หลบหนี / อ้างถึงเดี่ยว ซึ่งหมายความว่ารหัสปัญหานั้นเหมือนกัน
โฮสต์ ssh "echo clienthostname"
และจะพิมพ์ชื่อโฮสต์ของไคลเอ็นต์ไม่ใช่ชื่อโฮสต์ของเซิร์ฟเวอร์
โดยการหลีกเลี่ยง $ in $ HOSTNAME มันจะถูกส่งไปตามตัวอักษรและประเมินบนเซิร์ฟเวอร์แทน
โดยใช้
ssh host "print \$HOST"
หรือ
ssh host 'print $HOST'
คุณสามารถป้องกันเชลล์โลคัลของคุณไม่ให้ขยายโฮสต์และให้เชลล์remote-server
ขยายแทน