Intereting Posts
Я хочу удалить строку из одного символа до тех пор, пока не будет найден другой символ У меня есть команда, которая выводит каталог, и я хочу записать cd в этот каталог Использование заголовков ядра реального времени для компиляции кода пользовательского пространства и заголовков по умолчанию Пример setuid из Википедии: 4700 Как приостановить (или захватить) сообщения, которые пролетают в конце последовательности запуска? Подключение к виртуальной машине Ubuntu с терминала на главной машине эффект сигнала перезагрузки в состоянии serviced службы yum groupinstall «Средства разработки» не работает Настройка памяти ZFS ARC CentOS: избегайте переключения ALT-F4 на консоль Что происходит при нажатии Ctrl + Alt + F <Num>? Как отключить ssh-agent? Как / Почему кошка записывает загрузочный ISO на устройство Как отключить MAC-адрес после отключения? OpenSSL конвертирует символы в UTF-8

Тернарный оператор и печать

Что не так с командой ниже

awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}' 

Вывод :

 awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"} awk: ^ syntax error 

Как и во многих других языках программирования, awk различает выражения и выражения. По большому счету, операторы – это действия, которые выполняются, а выражения – это вычисления, которые приводят к значению.

Тернарный оператор в awk , как и его аналог в C, откуда он исходит, сам по себе является выражением (а не утверждением), которое ожидает три других выражения как expr1 ? expr2 : expr3 expr1 ? expr2 : expr3 . print – это заявление. Он не может использоваться там, где вызывается выражение, следовательно, синтаксическая ошибка.

Вы пробовали awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}' ?

Использование оператора, в котором вызывается выражение, не имеет смысла. Заявления не возвращают значения. Итак, когда у вас есть condition ? stmt1 : stmt2 condition ? stmt1 : stmt2 , каково значение, вычисленное тройным оператором? Если condition ложно, оно должно быть значением stmt2 но это не значение, это действие.