Це насправді в POSIX awk
(посилання на POSIX 2008, я вважаю, що це мали і попередні версії). -v
описано в розділі « Параметри» , інший спосіб - у розділі « Операнди» .
Існує різниця між -v
і передачею завдань в кінці з іменами файлів:
Додаток повинен забезпечити, щоб аргумент присвоєння був у тій же формі, що і операнд призначення. Зазначене призначення змінної має відбуватися до виконання програми awk, включаючи дії, пов'язані з BEGIN-шаблонами (якщо такі є). Можна вказати кілька випадків цієї опції.
- Змішані з іменами файлів:
[...] Кожне таке призначення змінної має відбуватися безпосередньо перед обробкою наступного файлу , якщо такий є. Таким чином, призначення перед першим аргументом файлу виконується після дій BEGIN (якщо такі є), тоді як призначення після останнього аргументу файлу має відбуватися перед операціями END (якщо такі є). Якщо аргументів файлів немає, призначення повинні виконуватися перед обробкою стандартного вводу.
Приклад:
$ cat input
hello
hello
$ awk -v var=one 'BEGIN{print var} /hello/{print var} END{print var}' \
var=two input var=three input var=four
one
two
two
three
three
four