将带空格的字符串从shell传递到java
我正在做一个简单的工作,将我的java参数从shell传递到java,其中一个参数正好有空格 ./test.ksh-test param1 param2“\”带空格的param3“ test.ksh中的代码将带空格的字符串从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代码中,第三个参数被读取和打
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”
这实际上比看起来更复杂,但这里给出了答案(不是公认的答案;看看第二个或其他答案):tryjava-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个。文字引号不重要,也不会被重新解释。