将带空格的字符串从shell传递到java

将带空格的字符串从shell传递到java,java,shell,Java,Shell,我正在做一个简单的工作,将我的java参数从shell传递到java,其中一个参数正好有空格 ./test.ksh-test param1 param2“\”带空格的param3“ test.ksh中的代码 if [ "$1" = "-test" ] then echo "Test" SCRIPT_ARG="${*}" echo "${SCRIPT_ARG}" fi java -jar test.jar ${SCRIPT_ARG} 但是在java代码中,第三个参数被读取和打

我正在做一个简单的工作,将我的java参数从shell传递到java,其中一个参数正好有空格

./test.ksh-test param1 param2“\”带空格的param3“

test.ksh中的代码

if [ "$1" = "-test" ]
then
   echo "Test"
   SCRIPT_ARG="${*}"
   echo "${SCRIPT_ARG}"
fi

java -jar test.jar ${SCRIPT_ARG}
但是在java代码中,第三个参数被读取和打印为

“第3条


这看起来很简单,但是这里缺少一些想法。

参数是一个字符串列表,但是您将它们连接成一个字符串,然后在空格上重新拆分

相反,不要连接它们,而是将它们作为字符串列表进行处理:

#!/usr/bin/ksh

if [ "$1" = "-test" ]
then
   echo "Test"
   script_arg=( "${@}" )
   for i in "${script_arg[@]}"
   do
     echo "One of the arguments is: $i"
   done
fi

java -jar test.jar "${script_arg[@]}"
然后,您应该使用以下工具运行它:

./test.ksh -test param1 param2 "param3 with spaces"

不要尝试嵌入更多的引号。

我没有问题将带空格的字符串直接传递给java:
java“abc def”“ghi”
这实际上比看起来更复杂,但这里给出了答案(不是公认的答案;看看第二个或其他答案):try
java-jar test.jar”参数可能与空格重复“
或只是将${SCRIPT\u ARG}括在空格中:
java-jar test.jar”${SCRIPT\u ARG}”
您需要将
-test
ARG off.OP移走,但可能没有这样做或提到。您是对的,但我认为OP也是这个意思。无论如何,请参阅我的问题评论中的dup链接;这也是其中的一个答案。感谢您的回复,所以键是“${script_arg[@]}”,包括此时引号中的每个参数。如果我在引号中传递引号(带转义),为什么java不接受它作为引号参数?引号是ksh用来填充java程序的
String[]args
的shell语法。Java不知道或解释引号。如果调用
main(新字符串[]{“foo”、“bar”、“baz\”})
显然也会在数组中看到3个元素,而不是2个。文字引号不重要,也不会被重新解释。