Как правило, пропустить переменные, рассчитанные или извлеченные awk awk в оболочку, вы будете следовать этим шаблонам кодирования ...
shell_var=$( awk '{ ...some processing... ; print awk_var }' )
, если у вас есть более одной переменной, вы можете сделать ...
eval "$( awk '{ ...some processing... ; print "shell_var1="awk_var1, "shell_var2="awk_var2 }' )"
Объяснение кода:
Уровень оболочки var = $ (awk '...')
будет назначать все, что процесс awk будет печатать в переменную оболочки. Поскольку вы можете назначить только одно значение этим означает, что вам нужен другой подход для двух или более переменных назначений. Один из подходов - позволить awk распечатать все задание, скажем awk '{print "varname =" значение}'
; Конструкция оболочки $ (...)
снова будет расширена до выхода встроенного вызова AWK, в данном случае назначение. И это расширенное присваиваемое команда Shell, чтобы стать активным, вам нужна оболочка, чтобы поручить его оценить; EVAL
- это команда, которая делает это. Разница в первом (простом) случае состоит в том, что вы можете позволить awk печатать несколько заданий (разделенных пробелом), а EVALL
все в одном.
Я дам пример с входом и выходной переменной и некоторым расчетом ...
number=42
square=$( awk -v NUM="$number" 'BEGIN{ print NUM*NUM }' )
echo "$square"
Надеюсь, что уточняет параметр, проходящий в обоих направлениях.
Кажется, что никто больше не знает.
There has been a 64-byte gap at the end of the irq stack for at least 12 years. It predates git history, and I can't find any good reason for it. Remove it. What's the worst that could happen?
http://git.kernel.org/linus/4950d6d48a0c43cc61d0bbb76fb10e0214b79c66