如何在bash中构造一个接受双引号参数的命令,该参数的内容包含单引号?

如何在bash中构造一个接受双引号参数的命令,该参数的内容包含单引号?,bash,Bash,我试图从bash脚本构造以下命令: >mycommand-选择“第三方应用程序,'应用程序选项'u a',1” 但是,当我在bash脚本中构建命令时,如下所示: app_option="app_option_a" app_option_val=1 tmp1='"third_party_app, ' tmp2="'${app_option}', ${app_option_val}" tmp3='"' optval="$tmp1$

我试图从bash脚本构造以下命令:

>mycommand-选择“第三方应用程序,'应用程序选项'u a',1”

但是,当我在bash脚本中构建命令时,如下所示:

app_option="app_option_a"
app_option_val=1
tmp1='"third_party_app, '
tmp2="'${app_option}', ${app_option_val}"
tmp3='"'
optval="$tmp1$tmp2$tmp3"
echo $optval # to show that $optval looks right
command=(mycommand -opt $optval)
"${command[@]}"
我获得了以下命令行输出:

>> "third_party_app, 'app_option_a', 1"
>> + mycommand -opt '"third_party_app,' ''\''app_option_a'\'',' '1"'
我有点明白为什么在提示符输出中$optval的内容周围放了一对单引号,但我完全被$optval内容中所有添加的单引号和反斜杠所抛弃。我知道我缺少一些基础知识,所以请给我指出正确的方向


我已经读过,它们很有用,但没有给出如何在一对双引号内构造命令参数的解决方案,比如
command“需要双引号的参数”
。相反,他们的答案只会导致
command'参数需要使用双引号

Quote
$optval
command=(mycommand-opt“$optval”)
@DXZ:在示例中,您不会将任何双引号传递给mycommand。请注意,“foo”计算fo
foo'
@Wiimm,在
命令
数组中的$optval周围添加双引号没有任何区别。@user1934428,您能否详细说明这是如何导致示例中插入单引号和反斜杠的?@DXZ:在您的示例中,您明确插入了这些字符,例如,在执行
tmp3='“
时。我不知道您为什么希望在参数中使用引号。希望使用引号的命令很少。您希望使用引号的一个示例是在构建JSON代码时。引号
$optval
命令=(mycommand-opt“$optval”)
@DXZ:在您的示例中,您没有将任何双引号传递给mycommand。请注意,“foo”“计算fo
foo'
@Wiimm,在
命令
数组中的$optval周围添加双引号没有任何区别。@user1934428,您能详细说明一下这是如何导致示例中插入单引号和反斜杠的吗?@DXZ:在您的示例中,您明确插入了这些字符,例如,在执行
tmp3=''“
时。我不知道您为什么希望在参数中使用引号。希望使用引号的命令很少。您希望使用引号的一个示例是在构建JSON代码时。