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 ).