通过 shell 传递 space 分隔值需要比预期更多的参数

Passing a space separated value via shell is taking more argument then expected

我很难从使用嵌套变量的 shell 脚本 (bash) 启动 java 程序

export MAIN_CLASS="xxxxx"
MAIN_CLASS_ARGS=("$FirstArg" "$SEC_ARG" )
CMD="java some args here ${MAIN_CLASS} ${MAIN_CLASS_ARGS[@]}"
exec $CMD

我将参数传递为

export FirstArg = hello
export SEC_ARG ="hi Jam"

但是在我的主程序中 java class 我得到了 3 个参数 hello, hi ,Jam。但我希望它只有两个。我在这里缺少什么任何人都可以帮助我。

我检查了一些 link 作为

link

但无法修复。

当你运行exec $CMD时,则对$CMD的内容进行分词。变量是如何建立的并不重要;此时,它只是一个被 shell.

拆分的字符串

由于您使用的似乎是支持数组的 shell,因此一种选择是:

CMD=( java some args here "${MAIN_CLASS}" "${MAIN_CLASS_ARGS[@]}" )
exec "${CMD[@]}"

也就是说,构建一个包含所有参数的数组,然后使用带引号的数组扩展,这样可以防止发生分词。