如何通过bash变量将带引号的字符串作为单个参数传递

时间:2015-04-30 16:29:16

标签: bash shell

我有一个应用程序,我通过bash exports接收命令行参数的一部分。

[env.sh] 
export options="-def \"hello world\""

[run.sh]
source ./env.sh 
myprogram $options

当我执行run.sh时,我希望myprogram会在以下列表中接收参数

argv[0] myprogram
argv[1] -def
argv[2] hello world

然而,真正发生的是......

argv[0] myprogram
argv[1] -def
argv[2] "hello
argv[3] world"

因此引用“hello world”成为2个独立命令行参数的一部分。

如何通过bash变量传递包含带引号的字符串的命令行选项?我正在使用bash,但如果需要我可以使用其他shell ..

1 个答案:

答案 0 :(得分:3)

数组会处理所有引用问题。

[env.sh] 
options=(-def "hello world")

[run.sh]
source ./env.sh 
myprogram "${options[@]}"
已删除

export个关键字,因为此处不需要,也不适用于数组。