什么';s表示差异为空&引用\0,对于变量‘,在awk中为空;价值

什么';s表示差异为空&引用\0,对于变量‘,在awk中为空;价值,awk,null,Awk,Null,正如标题所说,我不知道变量“值”何时为NULL或NUL或”或\0或空 有人能解释一下吗 谢谢据我所知,awk中没有特殊的NULL值,也没有空变量和未设置变量之间的区别。如果未为变量赋值,它将根据上下文计算为空字符串“或0。例如: awk 'BEGIN{print "a" b "c"}' 这里b是一个未设置的变量。在字符串上下文中,它的计算结果为”,生成输出ac awk 'BEGIN{print 1+a}' a尚未设置,但处于数字上下文中。在这种情况下,它的计算结果为0,产生输出1 空字节\0

正如标题所说,我不知道变量“值”何时为NULLNUL\0

有人能解释一下吗


谢谢

据我所知,awk中没有特殊的
NULL
值,也没有空变量和未设置变量之间的区别。如果未为变量赋值,它将根据上下文计算为空字符串
0
。例如:

awk 'BEGIN{print "a" b "c"}'
这里
b
是一个未设置的变量。在字符串上下文中,它的计算结果为
,生成输出
ac

awk 'BEGIN{print 1+a}'
a
尚未设置,但处于数字上下文中。在这种情况下,它的计算结果为
0
,产生输出
1

空字节
\0
完全是另一回事。您可以像任何其他转义序列一样打印一个转义序列,例如制表符
\t
或换行符
\n
。只是很难看到一个。要执行此操作,可以使用
cat-v

$ awk 'BEGIN{print "a\0c"}' | cat -v
a^@c
输出中的
^@
表示存在空字节

您还可以使用
xargs
“查看”空字节:

$ awk 'BEGIN{print "a\0c"}' | xargs -0
a c
xargs
-0
选项告诉它参数将由空字节分隔。如您所见,有两个参数,
a
c

@Tom Fenech
谢谢,我之所以有这样的问题,是因为在阅读awk的信息时,我对变量RS感到困惑

正如信息所说:

空字符串“%1”(不含任何字符的字符串)具有特殊的 意义是“RS”的价值。这意味着记录由 一个或多个空行,没有其他内容

开始{RS=“\0”}#整个文件变成一条记录


现在,在阅读了您的解释之后,我才知道这一点!

特别是解释RS变量,^-^RS变量
^-^
将是特定于gawk的,因为它是多字符的,这意味着文件中有1或2条记录,这取决于文件是否以
-^
开头。它可能是一种无意义的设置,将RS设置为一个不存在于文件中的值,试图将整个文件作为一条记录读取,但正确的方法是
RS='^$'
,而且它是特定于gawk的。
RS=“\0”
可能会失败,因为某些文件可能包含NUL字符。确保读取整个记录的唯一方法是使用GNU awk和
RS='^$'
或在任何awk中,您需要一次构建一行记录
{rec=rec$0 RS}结束{do stuff with rec,它现在包含整个文件}