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

时间:2015-03-29 06:14:33

标签: bash awk gawk

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

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

foobar.sh有:

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

不起作用:

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

怎么做?

2 个答案:

答案 0 :(得分:4)

应使用-v选项传递:

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

答案 1 :(得分:3)

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

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

如果没有这些引号,字符串将分为两个单词:

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

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

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