为什么 $var 给出 $0 的值?

Sre*_*yan 3 command-line parameter awk variable-substitution

我写了一个非常简单的 awk 脚本,它反转文件的每个单词——:

awk '
{
for (i=1;i<=NF;i++)
{ x=""
for(j=length($i);j>0;j--)
x=x substr($0,j,1);
print x
}}' file1
Run Code Online (Sandbox Code Playgroud)

file1的内容如下-:

hello
Run Code Online (Sandbox Code Playgroud)

现在让我感到困惑的是,当我更换 - 时:

print x
Run Code Online (Sandbox Code Playgroud)

print $x
Run Code Online (Sandbox Code Playgroud)

我得到了记录的输出,即。我打招呼,而不是olleh的反向输出。

为什么使用 $x 给我 $0 的内容?变量如何在 awk 中工作?它真的很混乱。当我想使用 $x 而只使用 x 时,是否有固定规则?

Mar*_*elo 8

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.