Gawk 5.0.0 был выпущен 12 апреля 2019 года. Проходя через объявление Я нашел это:
Изменения с 4.2.1 до 5.0.0
(...) 11. Пространства имен были реализованы!Смотрите руководство.Одним из следствий этого является то, что файлы, включенные в -i
, читаемые в -f
и программные сегменты командной строки, должны быть автономными синтаксическими единицами.Например, вы больше не можете делать что-то вроде этого:
gawk -e 'BEGIN {' -e 'print "hello" }'
Мне было любопытно, что такое поведение больше не поддерживается, но, к сожалению, мой Gawk 4.1.3 не дал большого выхода из него:
$ gawk -e 'BEGIN {' -e 'print "hello" }'
gawk: cmd. line:1: BEGIN {
gawk: cmd. line:1: ^ unexpected newline or end of string
Из того, что я вижу в руководстве к GAWK 4.2, опция -e
уже помечена как проблемная:
Руководство пользователя GNU Awk, вкл. Опции
-e текст программы
--source
текст программы
Предоставить программуИсходный код в программе-тексте.Эта опция позволяет вам смешивать исходный код в файлах с исходным кодом, который вы вводите в командной строке.Это особенно полезно, когда у вас есть библиотечные функции, которые вы хотите использовать в своих программах командной строки (см. Переменная AWKPATH).
Обратите внимание, что gawk обрабатывает каждую строку, как если бы она заканчивалась символом новой строки (даже если онане делает).Это облегчает сборку всей программы.
ВНИМАНИЕ: В настоящее время не требуется, чтобы каждый программный текст был полным синтаксическим модулем.То есть в настоящее время работает следующее:
$ gawk -e 'BEGIN { a = 5 ;' -e 'print a }'
-| 5
Однако это может измениться в будущем, поэтому не стоит полагаться на эту функцию.
Но, опять же,это терпит неудачу в моей консоли:
$ gawk -e 'BEGIN {a=5; ' -e 'print a }'
gawk: cmd. line:1: BEGIN {a=5;
gawk: cmd. line:1: ^ unexpected newline or end of string
Так, что gawk -e 'BEGIN {' -e 'print "hello" }'
делает точно на Gawk <5? </p>