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.