>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
怎么做?
答案 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引用总是有用的。