awk 具有对数字和字符串进行操作的内置函数。这正是编程语言的作用。
这让我想知道是否可以使用 awk 来执行一些数字或字符串操作,而不指定文件作为输入? awk 可以在没有文件或标准输入输入的情况下工作吗?
例如,我希望 awk 评估1+2
,并在 awk 程序中对“输入”1 和 2 进行硬编码。好吧,我自己回答:
$ awk "BEGIN{print 1+2}"
3
但令我惊讶的是 awk 不等待来自 stdin 的输入,因为我没有指定输入文件。为什么不?
谢谢。
答案1
这是设计使然。它(至少)记录在 GNU 手册页中:awk
如果程序完全由
BEGIN
块组成,则执行终止,否则打开输入流并继续执行。
从POSIX:
如果
awk
程序仅包含具有模式 的操作BEGIN
,并且该BEGIN
操作不包含getline
任何函数,则当执行awk
最后一个操作中的最后一条语句时,应退出而不读取其输入。BEGIN