Primeiro, você deve saber qual é a variável válida em awk
. POSIX definiu a variável awk como:
An operand that begins with an <underscore>
or alphabetic character
from the portable character set (see the table in XBD Portable
Character Set), followed by a sequence of underscores, digits, and
alphabetics from the portable character set, followed by the '='
character, shall specify a variable assignment rather than a pathname
Então, quando você tem uma awk
variable x
e deseja usar x
, apenas faça referência a ela, escrevendo x
diretamente, exemplo print x
ou y = x
.
Quando você usa $x
, está acessando variáveis de campo awk . Em awk
, as variáveis de campo são acessadas por $
, seguido por um número ou expressão numérica. Portanto, quando você escrever $x
, awk
avaliará x
primeiro. Se x tiver um valor numérico, como 1
, a instrução se tornará $1
, awk
fornecerá o valor da primeira variável de campo. Ou você tem uma expressão numérica como (1+1)
, então $(1+1)
se torna $2
, você obterá o valor da segunda variável de campo.
Observe que, quando a expressão do número de campo é avaliada como algo diferente de inteiro não negativo , o comportamento não é especificado (como x = "qwerty"
ou x = "qwerty"+1
, então, acessar $x
não é especificado) :
The effect of the field number expression evaluating to anything other
than a non-negative integer is unspecified; uninitialized variables or
string values need not be converted to numeric values in this context
No seu caso, sua implementação de awk
teve a expressão de número de campo de avaliação (que é uma string) para 0
, então você obteve o valor da variável $0
. Em outras implementações awk
, o resultado pode ser diferente (Pelo menos no OpenBSD awk
, você receberá um erro illegal field
).