Linux действительно выводит панику на экран... в зависимости от Вашего определения экрана.
То, что на самом деле делает Linux, вывести к системной консоли. Часто это - экран, но может быть последовательной консолью (или в другом месте) вместо этого.
Однако большинство людей работает X на их рабочих столах. Что означает, что консоль не находится на экране, кадровый буфер. У Вас должен был бы быть дамп Linux к кадровому буферу в этом случае, и я подозреваю, что это действительно, что Вы ищете.
Удачный для Вас, существует проект, работающий над этим законченным в Ubuntu. Я не знаю, как далеко вдоль проекта, но это выглядит многообещающим, и это - то, где необходимо запустить.
Сначала вы должны знать, что является допустимой переменной в awk
. POSIX определил awk переменную как:
Операнд, который начинается с
или с буквенного символа из портативного набора символов (см. таблицу в XBD Portable). Набор символов), за которым следует последовательность символов подчеркивания, цифр и алфавита из портативного набора символов, за которым следует '='. символ, должен указывать присваивание переменной, а не патнама
Таким образом, когда у вас есть awk
переменная x
, и вы хотите использовать x
, просто сделайте на нее ссылку, написав непосредственно x
, например, распечатайте x
или y = x
.
При использовании $x
вы получаете доступ к переменным awk Field. В awk
доступ к переменным поля осуществляется с помощью $
, за которым следует числовое или числовое выражение. Таким образом, при записи $x
, awk
сначала оценит x
. Если х имеет числовое значение, как 1
, то оператор становится $1
, awk
выдаст значение переменной первого поля. Или в числовом выражении типа (1+1)
, тогда $(1+1)
станет $2
, получится значение переменной второго поля.
Обратите внимание, что когда выражение с номером поля вычисляется в какое-либо другое, чем неотрицательное целое число, поведение не определено (как x = "qwerty"
или x = "qwerty "+1
, то доступ к $x
является неуказанным):
Влияние выражения с номером поля, вычисляемого в какое-либо другое чем неотрицательное целое число не указано; неинициализированные переменные или строковые значения не обязательно преобразовывать в числовые значения в данном контексте
В вашем случае в реализации awk
было оценено выражение числа поля (которое является строковым) в 0
, и вы получили значение переменной $0
. В другой реализации awk
результат может быть другим (по крайней мере, в OpenBSD awk
вы получите ошибку нелегальное поле
).
x
- ваша awk-переменная, $x
- что-то другое.....
$0
соответствует содержимому только что прочитанной входной строки, в то время как $1
... $n
соответствуют полям разбиения содержимого $0
с помощью сепаратора по умолчанию.
awk позволяет программно обращаться к полям с помощью переменной, т.е. если переменная MyValue
содержит 5
, то $MyValue
совпадает с $5
.
Здесь происходит то, что ваша переменная x
действительно содержит строку olleh
, которая численно интерпретируется как 0
. В awk все строки, начинающиеся с нечисловых значений, когда они используются в качестве числовых значений, интерпретируются как 0
, например, 5* "test"
оценивает до 0
, так как "test"
интерпретируется как 0
). Таким образом, в вашем случае $x
- это то же самое, что и $0
, которая является входной строкой, т.е. hello
.