Вопрос:

Странное поведение awk, $ 1 печатается, а $ 0 - нет?

linux bash ubuntu awk

114 просмотра

2 ответа

526 Репутация автора

Это напечатано хорошо ls | xargs -I var sh -c 'echo var | awk "{print $1}"'

пока это не ls | xargs -I var sh -c 'echo var | awk "{print $0}"'

Очевидно, это не мой вариант использования, а просто воспроизведение проблемы.

Таким образом, хотя $ 0 обозначает полную строку, странно, что $ 0 не печатается, а $ 1 печатается.

Эталонная ОС - Ubuntu 14.04

Автор: rusia.inc Источник Размещён: 19.05.2017 02:25

Ответы (2)


5 плюса

542826 Репутация автора

Решение

Когда вы используете:

ls | xargs -I var sh -c 'echo var | awk "{print $0}"'

То есть $0в двойных кавычках, следовательно, $0расширяется оболочкой, которая в этом случае имеет значение shбез кавычек. awkобрабатывает его как переменную и печатает пустым.

Чтобы заставить это работать избежать $:

ls | xargs -I var sh -c 'echo var | awk "{print \$0}"'

Почему $1работает:

ls | xargs -I var sh -c 'echo var | awk "{print $1}"'

$1также расширяется оболочкой и пусто. Следовательно, awkпросто выполняется пустой, printкоторый эквивалентен, print $0и вы получите имя файла в выводе.

Однако не рекомендуется использовать команду awk в двойных кавычках, а lsвывод синтаксического анализа подвержен ошибкам.

Автор: anubhava Размещён: 19.05.2017 02:35

0 плюса

71 Репутация автора

Если ваш синтаксис был идеальным, но вы используете файлы Windows, помните, что \ r эффективно перезапишет ваш текст и создаст впечатление, что $ 0 пусто ...

Автор: StevenWernerCS Размещён: 12.06.2019 09:57
Вопросы из категории :
32x32