Как и многие другие языки программирования, awk
различает выражения и операторы. По большому счету, операторы - это выполняемые действия, а выражения - это вычисления, результатом которых является значение.
Тернарный оператор в awk
, как и его аналог в C, откуда он происходит, сам является выражением (а не оператором), ожидающим трех других выражений как expr1? выражение2: выражение3
. print
- это утверждение. Его нельзя использовать там, где требуется выражение, отсюда и синтаксическая ошибка.
Вы пробовали awk 'BEGIN {a = 5; b = 6; печать (а == б)? "a == b": "a! = b"} '
?
Использование оператора, в котором вызывается выражение, не имеет никакого смысла. Заявления не возвращают значений. Итак, когда у вас состояние ? stmt1: stmt2
, какое значение вычисляет тернарный оператор? Если условие
ложно, это должно быть значение stmt2
, но это не значение, это действие.
Да, есть такие проекты, как pacproxy . Широко используемый прокси Shadowsocks также использует PAC для внутренних целей.