Почему $var дает значение 0$?

Linux действительно выводит панику на экран... в зависимости от Вашего определения экрана.

То, что на самом деле делает Linux, вывести к системной консоли. Часто это - экран, но может быть последовательной консолью (или в другом месте) вместо этого.

Однако большинство людей работает X на их рабочих столах. Что означает, что консоль не находится на экране, кадровый буфер. У Вас должен был бы быть дамп Linux к кадровому буферу в этом случае, и я подозреваю, что это действительно, что Вы ищете.

Удачный для Вас, существует проект, работающий над этим законченным в Ubuntu. Я не знаю, как далеко вдоль проекта, но это выглядит многообещающим, и это - то, где необходимо запустить.

3
24.11.2017, 07:02
2 ответа

Сначала вы должны знать, что является допустимой переменной в 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 вы получите ошибку нелегальное поле ).

2
27.01.2020, 21:10

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.

8
27.01.2020, 21:10

Теги

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