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

Bash 如何将包含空格的参数传递给包含gawk match()的脚本?,bash,awk,gawk,Bash,Awk,Gawk,是一个合法命令,我想在shell脚本中将参数foo bar传递给它: foobar.sh具有: >gawk 'match("", "foo bar", junk)' 不起作用: #!/bin/bash gawk 'match("", "'$1'", junk)' 如何操作?应使用-v选项传递: 应该使用-v选项传递它: 您省略了避免分词所需的引号: gawk -v arg="foo bar" 'match("", arg, junk)' 如果没有这些引号,字符串将拆分为两个单词: g

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

foobar.sh具有:

>gawk 'match("", "foo bar", junk)'
不起作用:

#!/bin/bash
gawk 'match("", "'$1'", junk)'
如何操作?

应使用-v选项传递:

应该使用-v选项传递它:


您省略了避免分词所需的引号:

gawk -v arg="foo bar" 'match("", arg, junk)'
如果没有这些引号,字符串将拆分为两个单词:

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


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

您省略了避免分词所需的引号:

gawk -v arg="foo bar" 'match("", arg, junk)'
如果没有这些引号,字符串将拆分为两个单词:

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


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

用这种方式将变量inn读入awk并不是最好的方法。最好使用-v选项。@jotne,这是真的,但应该解释一下。我相应地编辑了我的答案。是的,在完整的例子中我确实有一段引语。谢谢你的所有答案。用这种方式阅读变量inn到awk并不是最好的方式。最好使用-v选项。@jotne,这是真的,但应该解释一下。我相应地编辑了我的答案。是的,在完整的例子中我确实有一段引语。谢谢你的回答。