我有一个应用程序,我通过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 ..
答案 0 :(得分:3)
数组会处理所有引用问题。
[env.sh]
options=(-def "hello world")
[run.sh]
source ./env.sh
myprogram "${options[@]}"
已删除 export
个关键字,因为此处不需要,也不适用于数组。