在 OpenVMS 上的 awk 中输出双引号

Outputting a double quote in awk on OpenVMS

运行 openvms 系统上的 GNU Awk 3.1.1。任何人都知道我如何输出双引号字符。尝试了各种方法都没有成功,例如

$ gawk "BEGIN {print "Hello, World"}" NL:
/chas$dka0/psx$root/bin/gawk: cmd. line:2: (END OF FILE)
/chas$dka0/psx$root/bin/gawk: cmd. line:2: parse error

$ gawk "BEGIN {print "\"Hello, World\""}" NL:
/chas$dka0/psx$root/bin/gawk: cmd. line:1: BEGIN {print \Hello, World\"}
/chas$dka0/psx$root/bin/gawk: cmd. line:1:              ^ backslash not last character on line

我得到的最接近的是

$ gawk "BEGIN {print ""Hello, World""}" NL:
Hello, World

但没有前导或尾随 " 出现

知道了!

$ gawk -v qte="""" "BEGIN {print qte""hello world""qte}" NL:
"hello world"

或者您可以使用

$ gawk "BEGIN {print ""\""Hello, World\""""}" nl:

您可能知道,要让 DCL 在字符串中包含引号字符,您必须将其加倍。对于 DCL,gawk 程序文本是一个带引号的字符串。在程序文本中,您需要另一个字符串,一个 gawk 引用字符串。因此 DCL 将所有双引号字符替换为单个字符。也就是说,DCL通过

BEGIN {print "\"Hello, World\""}

作为 gawk 的程序文本。这可以用一个简单的

来验证
$ write sys$output "BEGIN {print ""\""Hello, World\""""}"

在 gawk 字符串中,您必须使用“\”转义 gawk 引号字符。

在你的解决方案中,DCL 通过了

BEGIN {print qte"hello world"qte}

作为 gawk 的程序文本,打印 qte 的内容、字符串“hello world”以及 qte 的内容。