通过shell传递空格分隔值正在进行更多的参数然后预期

时间:2017-06-02 08:49:33

标签: java shell command-line jvm-arguments

我很难从使用嵌套变量的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类中我得到了3个参数hello,嗨,Jam。但我期待它只有两个。我在这里失踪的任何人都可以帮助我。

我已将部分链接检查为

link

但无法修复它。

1 个答案:

答案 0 :(得分:1)

当您运行exec $CMD时,会对$CMD的内容执行分词。变量是如何建立起来的并不重要;在这一点上,它只是一个由shell分割的字符串。

由于您似乎使用的是支持数组的shell,因此可以选择执行以下操作:

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

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