如何将包含空格的参数传递给包含 gawk match() 的脚本?

how to pass an argument containing whitespace to a script containing gawk match()?

>gawk 'match("", "foo bar", junk)'

是一个合法的命令,我想在 shell 脚本中将参数 foo bar 传递给它:

foobar.sh 其中有:

#!/bin/bash
gawk 'match("", "''", junk)'

无效:

>./foobar.sh "foo bar"
gawk: match("", "foo
gawk:           ^ unterminated string

怎么做?

应该使用 -v 选项传递:

gawk -v arg="foo bar" 'match("", arg, junk)'

您遗漏了避免分词所需的引号:

gawk 'match("", "'""'", junk)'

没有这些引号,字符串被分成两个词:

match("", "foo
bar", junk)

awk 坚持认为程序是单个参数(下一个参数将被视为文件名),因此会产生语法错误,如观察到的那样。

这不是将任意字符串传递到 awk 脚本的最佳方法,因为如果字符串包含引号或反斜杠,它将失败。最好使用 -v var=value 命令行选项直接从 bash 字符串初始化 awk 变量,这不涉及将字符串实际解析为 [=12= 的一部分] 程序。但是,理解 bash 引用总是有用的。