awk:空文件上的内置 FILENAME 变量

αғs*_*нιη 7 awk

awk当输入是空文件时,为什么的 FILENAME 变量不返回任何内容?这是否意味着awk不打开该文件?如果不打开怎么知道它是空的,或者如果它打开为什么不返回文件名呢?

我读了这篇文章,但没有解释为什么下面应该工作。

awk 'BEGINFILE{print FILENAME}1' filename
Run Code Online (Sandbox Code Playgroud)

下面没有。

awk '{print FILENAME}' filename #or
awk 'BEGIN{print FILENAME}' filename
Run Code Online (Sandbox Code Playgroud)

Ned*_*d64 8

awk手册:

FILENAME  A  pathname  of  the  current input file.
Inside a BEGIN action the value is undefined.  (...)
Run Code Online (Sandbox Code Playgroud)

我想这就是解释。在处理字段之前, 的值FILENAME是未定义的。由于在空文件的情况下不处理任何字段,因此变量保持未初始化状态。