我很难从使用嵌套变量的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。但我期待它只有两个。我在这里失踪的任何人都可以帮助我。
我已将部分链接检查为
但无法修复它。
答案 0 :(得分:1)
当您运行exec $CMD
时,会对$CMD
的内容执行分词。变量是如何建立起来的并不重要;在这一点上,它只是一个由shell分割的字符串。
由于您似乎使用的是支持数组的shell,因此可以选择执行以下操作:
CMD=( java some args here "${MAIN_CLASS}" "${MAIN_CLASS_ARGS[@]}" )
exec "${CMD[@]}"
也就是说,建立一个包含所有参数的数组,然后使用引用的数组扩展,这样可以防止分词发生。