Переменные, поля и выражения
могут иметь цифровое или строчное
значение в соответствии с
контекстом. Например, в контексте
выражения, подобного следующему:
pop += $3
pop и $3 должны трактоваться как
цифровые.
В контексте строки, подобной:
print $1 ":" $2
строки $1 и $2 сливаются.
В операторах присвоения "v = e"
или "op = e" тип "v" станет
таким же, как и у "e". В
двухсмысленном контексте:
$1 == $2
тип сравнения зависит от того,
являются поля цифровыми или
строковыми и это будет определено
только тогда, когда будет работать
программа. Тип будет отличаться для
каждой записи.
Если два операнда являются
цифровыми, то сравнение будет
цифровым, если операнды являются
строковыми, то сравнение -
строковое. Все поля переменных
имеют строковый тип; дополнительно
каждое поле, которое содержит
только цифры, имеет цифровой тип.
Например, сравнение "$1 == $"
успешно выполнится для любой части
ввода:
1 1.0 +1 0.1e+1 10E-1 001
но неуспешно для:
(ноль) 0
(ноль) 0.0
0a 0
1e50 1.0e50
Существуют две идиомы приведения
выражения к одному или другому
типу:
- number"" -
- присоединяет нулевую строку к
number для приведения к
строковому типу;
- string+0 -
- добавляет ноль к string для
приведения к цифровому типу.
Чтобы выполнить строковое
сравнение между двумя полями,
используйте:
$1 "" == $2 ""
Так значение: "12.34x" равно 12.34,
а значение "x12.34" равно нулю.
Значение строки арифметического
выражения вычисляется путем
формирования строки с
преобразованием формата выводного
файла.
Неустановленные переменные имеют
цифровое значение 0 (ноль) и
строковое значение "".
Несуществующие поля имеют только
строковое значение ""; они не
являются цифровыми.
|