Назад | Перейти на главную страницу

Неожиданные результаты Awk с sh -c

Я пытаюсь выполнить sudo команду, которая использует Awk, и похоже, что awk работает по-другому внутри sh -c.

echo '1 2' | awk '{print $2}'

2

sh -c "echo '1 2' | awk '{print $2}'"

1 2

Почему это происходит?

Вы используете двойные кавычки, поэтому $2 оценивается. Внутренние одинарные кавычки больше на это не влияют. Если $2 пусто, вы в основном звоните awk '{print }'. Следовательно, вы получаете всю строку ввода как вывод.

Вы могли бы, например, избежать $ с обратной косой чертой: \$2