Awk ไม่ทำงานเมื่ออยู่ในเครื่องหมายคำพูดคู่


11

คำสั่งนี้ไม่ทำงาน:

ssh $HOST "ls -l | awk '{print $1}'"`

awkดังกล่าวข้างต้นจะไม่สนใจคำสั่ง ฉันคิดว่ามันอาจเป็นเพราะคำพูดซ้อน

นอกจากนี้ฉันจะเพิ่มเครื่องหมายคำพูดคู่อีกชุดหนึ่งใน awk ได้อย่างไร

เช่น:

ssh $HOST "awk '{print $1 "*"}' /some_file"

ฉันพยายามหลบหนีคำพูดฉันก็ลองสิ่งนี้:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

ปราศจากความสำเร็จ.

คำตอบ:


19

การแก้ไขตัวแปรจะดำเนินการภายในเครื่องหมายคำพูดคู่ดังนั้นนี่คือสิ่งที่ฉันคิดว่าอาจจะเกิดขึ้น: เมื่อคุณพิมพ์ssh $HOST "ls -l | awk '{print $1}'"เชลล์ของคุณ (อันที่อยู่ในเครื่องคอมพิวเตอร์ของคุณที่คุณกำลังเรียกใช้ไคลเอนต์ SSH) เห็น$1ภายในเครื่องหมายคำพูดคู่และแทนที่ด้วย ค่าของตัวแปร$1ซึ่งจะว่างเปล่า ไม่สามารถตรวจพบว่า$1มีการซ้อนภายในเครื่องหมายคำพูดเดี่ยวภายในเครื่องหมายคำพูดคู่ ดังนั้นสิ่งที่เกิดขึ้นการส่งไปยังเซิร์ฟเวอร์ระยะไกลคือ

ls -l | awk '{print }'

ซึ่งโดยทั่วไปเทียบเท่ากับ

ls -l | cat

ls -lคือมันเป็นเพียงแค่พิมพ์ออกการส่งออกของ

วิธีแก้ปัญหา: หลบหนี$ด้วยแบ็กสแลช

ssh $HOST "ls -l | awk '{print \$1}'"

ฮ่าฮ่ามันง่ายมาก! ฉันแค่มองผ่านมันไป! นี่คือสิ่งที่ฉันต้องการ ssh $ HOST "ls -l | awk '{print \ $ 1 \" * \ "}'" ขอบคุณมาก!
นิค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.