用bash中的变量包含的空格传递参数

Håk*_*and 1 bash awk

考虑将一些参数集传递给函数,例如:

awk -vv1="Hello there" -vv2=Bye 'BEGIN {print v1,v2}'
Run Code Online (Sandbox Code Playgroud)

请注意,第一个参数包含空格.输出是:

Hello there Bye
Run Code Online (Sandbox Code Playgroud)

现在,我尝试将参数存储在变量中.首先考虑第一个参数中没有空格的情况:

arg="-vv1=Hello -vv2=Bye"
awk $arg 'BEGIN {print v1,v2}'
Run Code Online (Sandbox Code Playgroud)

这很好用.现在在变量中插入空格:

arg="-vv1='Hello there' -vv2=Bye"
awk $arg 'BEGIN {print v1,v2}'
Run Code Online (Sandbox Code Playgroud)

它给出了错误消息:

awk: there'
awk:      ^ invalid char ''' in expression
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?


更新

根据到目前为止的评论,我想改进我的问题:考虑arg另一个shell脚本的输出的情况.例如,假设这genArg是一个打印字符串的shell脚本:

"-vv1='Hello there' -vv2=Bye"
Run Code Online (Sandbox Code Playgroud)

到终点站.然后arg收集(在脚本中)像

arg=$(genArg)
Run Code Online (Sandbox Code Playgroud)

接下来我想awk用给定的参数调用:

awk $arg 'BEGIN {print v1,v2}'
Run Code Online (Sandbox Code Playgroud)

che*_*ner 8

使用数组:

arg=(-vv1="Hello there" -vv2=Bye)
awk "${arg[@]}" 'BEGIN {print v1,v2}'
Run Code Online (Sandbox Code Playgroud)