Рассмотрим f&&!--f
. Здесь оба условия f
и !--f
должны иметь значение True, чтобы было выполнено действие по умолчанию (печать строки). &&
- это логическое AND
.
Выражение в awk
истинно, если оно оценивается чем-то отличным от 0
. Итак, первое условие истинно, если f
не 0
.
!--f
означает уменьшение f
на 1
немедленно (f--
также уменьшается на единицу, но только немного позже, подробности см. в этой документации). И !
отрицает истинностное значение предыдущего утверждения. Так, если f
равно 1
, то --f
становится 0
, то есть Ложь. !
делает его Истинным. Предполагается, что это позволит уловить обстоятельство, когда f
не равно 1
.
В этом простом примере второй тест не является строго необходимым, но он гарантирует, что f
будет сброшен в 0
. Более короткая версия была бы такой:
awk 'f&&!--f;length($1)>8{f=1}' awk.write
И, возможно, более легкая для понимания:
awk 'f&&{print;f=0};length($1)>8{f=1}' awk.write
В вашем boot.o
есть эльфийская секция .multiboot
, которая несовместима с -fPIC
. Вы можете попытаться скомпилировать boot.o
с -fPIC
, но это не удастся.
См. заголовок https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format.
С другой стороны, нет смысла создавать загрузочный объект с -fPIC
. Даже если бы был «динамический загрузчик», не было бы ничего, с чем можно было бы динамически связываться во время процесса загрузки.