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 \ "* \"} '"Дякую купу!
Нік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.