gawk-e';开始{&&x27;-e&&x27;打印“你好”}&&x27;工作

gawk-e';开始{&&x27;-e&&x27;打印“你好”}&&x27;工作,awk,namespaces,gnu,Awk,Namespaces,Gnu,Gawk 5.0.0于2019年4月12日发布。通过检查,我发现: 从4.2.1更改为5.0.0 (……)11。名称空间已经实现!请参阅手册。这样做的一个结果是-i中包含的文件、用-f读取的文件以及命令行程序段都必须是自包含的语法单元。例如,您不能再这样做: gawk -e 'BEGIN {' -e 'print "hello" }' 我对这种不再受支持的行为感到好奇,但不幸的是,我的Gawk 4.1.3没有提供太多输出: $ gawk -e 'BEGIN {' -e 'print "hell

Gawk 5.0.0于2019年4月12日发布。通过检查,我发现:

从4.2.1更改为5.0.0

(……)11。名称空间已经实现!请参阅手册。这样做的一个结果是
-i
中包含的文件、用
-f
读取的文件以及命令行程序段都必须是自包含的语法单元。例如,您不能再这样做:

gawk -e 'BEGIN {' -e 'print "hello" }'
我对这种不再受支持的行为感到好奇,但不幸的是,我的Gawk 4.1.3没有提供太多输出:

$ gawk -e 'BEGIN {' -e 'print "hello" }'
gawk: cmd. line:1: BEGIN {
gawk: cmd. line:1:        ^ unexpected newline or end of string
从我在GAWK 4.2手册中看到的情况来看,
-e
选项已经被标记为有问题:

-e程序文本
--源代码
程序文本

在程序文本中提供程序源代码。此选项允许您将文件中的源代码与在命令行中输入的源代码混合使用。当您有要从命令行程序使用的库函数时(请参阅AWKPATH变量),这一点特别有用

请注意,gawk将每个字符串视为以换行符结尾(即使不是)。这使得构建总体程序更容易

注意:目前,没有要求每个程序文本都是完整的语法单元。即,以下各项目前正在发挥作用:

$ gawk -e 'BEGIN { a = 5 ;' -e 'print a }'
-| 5
但是,这在将来可能会改变,因此依赖此功能不是一个好主意

但是,这在我的控制台中再次失败:

$ gawk -e 'BEGIN {a=5; ' -e 'print a }'
gawk: cmd. line:1: BEGIN {a=5; 
gawk: cmd. line:1:             ^ unexpected newline or end of string

那么,gawk-e'BEGIN{'-e'print“hello”}在gawk<5上到底做了什么?

它做的正是你所期望的——将各个部分连接起来形成
gawk'BEGIN{print“hello”}
,然后执行它。实际上,您可以看到gawk是如何通过它组合代码段的:

<>这个脚本在段落和连接中没有用处,但是如果你考虑的是:

$ cat usea.awk
{ a++ }

$ echo foo | gawk -e 'BEGIN{a=5}' -f usea.awk -e 'END{print a}'
6
然后,您可以看到,将一些命令行代码与存储在要运行的文件中的脚本混合使用时,预期的功能可能非常有用:

$ gawk -o- -e 'BEGIN{a=5}' -f usea.awk -e 'END{print a}'
BEGIN {
        a = 5
}

{
        a++
}

END {
        print a
}

我已经用4.2.1对其进行了测试,它按预期工作。由换行符分隔的所有
-e
字符串的简单串联。它不适用于4.0。2@kvantour啊,对了,那么埃德的回答就很准确了。感谢您使用Gawk4.2查看它!我正在翻阅代码,看看有什么可以改变,但我找不到。@kvantour确实如此。通过查看,我找不到任何对
e
@kvantour的引用,我发现
--source
刚刚有了第一段,所以这部分是新的:请注意,gawk将每个字符串视为以换行符结尾(即使没有)。这使得构建整个程序变得更容易。谢谢!有趣的是,它在Gawk4.2上运行良好,但在我使用的4.1中没有。酷!我不知道-o/--pretty打印选项它对于帮助理解我们看到的许多脚本非常有用,因为我们在这个论坛上得到了一些非常有趣的想法wrt代码布局!我忍不住发帖解释
-o
选项的存在!
$ gawk -o- -e 'BEGIN{a=5}' -f usea.awk -e 'END{print a}'
BEGIN {
        a = 5
}

{
        a++
}

END {
        print a
}