Как явно объявлять переменные в awk

#awk #variable-declaration

#awk #объявление переменной

Вопрос:

Есть ли способ принудительно использовать (g / n) awk, чтобы переменные должны были быть объявлены / инициализированы перед использованием? (Как option explicit в vb).

Заранее благодарю вас.

Комментарии:

1. Нет, не существует.

Ответ №1:

Одним из механизмов для обнаружения ошибок такого рода является поддержка «lint» в реализации Awk GNU (Gawk).

Базовый пример:

 $ gawk --lint 'BEGIN { a }'
gawk: warning: statement has no effect
gawk: warning: reference to uninitialized variable `a'
  

Обратите внимание, что Gawk фактически «компилирует» код за один проход и знает обо всех переменных. Он создает их экземпляры до начала выполнения. То есть, все переменные фактически объявляются по их появлению в программе. Однако это не приводит к их инициализации.

Реализация Awk могла бы работать динамически, создавая экземпляр переменной, когда она встречается в первый раз во время выполнения, но Gawk таким образом не работает.

Мы можем увидеть переменные, о которых знает Gawk, получив дамп, который отправляется в файл с именем awkvars.out :

 $ gawk --dump-variables 'function foo() { return x }'
$ grep x awkvars.out 
x: untyped variable
  

Смотрите: функция, foo не выполнявшаяся, x известна и указана как переменная.