如何将包含空格的参数传递给包含 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 引用总是有用的。
>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 引用总是有用的。