Присвоение в фигурных скобках по сравнению с внешними фигурными скобками в awk

Не уверенный, применяется ли это в целом, но здесь - как вещи работают над недавно установленным Linux Mint 16, udisks2 Версия пакета 2.1.0-4 DPKG:

Это похоже /usr/lib/udisks2/udisksd создает те каталоги точки монтирования как root:root с полномочиями drwxr-xr-x, так восьмеричные 755; и фиксация должна действительно просто изменить полномочия на каталоге, например:

sudo -i
cd /media/paul
chgrp paul DISK1 DISK2
chmod g+w DISK1 DISK2

Полномочия сохранятся через перемонтирование и перезагрузки, которые удивили меня, потому что каталоги точки moint действительно исчезают на размонтировании; таким образом, что-то (вероятно, udisks/udisks2) помнит их полномочия и затем воссоздает их, когда Вы оставили их.

2
13.04.2017, 15:37
2 ответа

После некоторых исследований я нашел ответ.

Во-первых, согласно это:

Expression Patterns

An expression pattern will be evaluated as if it were an expression in a 
Boolean context. If the result is true, the pattern will be considered to 
match, and the associated action (if any) will be executed. If the result is 
false, the action will not be executed.

Так что в моем примере $NF=a[FNR] будет рассматриваться как шаблон выражения. Как сказано в доке, результат присваивания вычисляется к true или false.

В моём примере результат присваивания равен 0, который в булевом контексте оценивается как false, в результате чего образец считается несовпадающим, действие не выполняется.

Примечание для @Michael Homer

Вот пример, показывающий, что Назначение m возвращает присвоенное значение. в awk неверно.

$ awk 'function test() {a=2} BEGIN{print test()}'
<blank line>

$ perl -e 'sub test {$a=2}; print test'
2

Видите, какое присвоение возвращается в примере awk?

awk 'n=(m=5);END{print n}' печатает 5 из-за побочного эффекта , это не значит awk присвоенное ему возвращаемое значение.

0
27.01.2020, 21:50

В качестве конечного условия (того, что определяет, нужно ли печатать) используется:

$NF=a[FNR]

. Назначения возвращают назначенное значение, в данном случае a[FNR]. Первая строка файла данных из связанного вопроса:

A   0

a[FNR] инициализируется на $2. Это означает, что значение a[FNR] равно 0, что является ложным значением для awk. Это означает, что присваивание является ложным, что делает условное значение ложным и подавляет поведение печати по умолчанию. Если изменить файл данных на:

A   1
A   6   
B   0

, то будет выведена первая строка, а последняя пропущена.

Значит, не первая строка отсутствует, а любая строка, в которой последнее поле является нулевым (или пустым). Просто получается, что первая и только первая строка была такой.

9
27.01.2020, 21:50

Теги

Похожие вопросы