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

时间:2016-12-05 22:43:34

标签: java shell

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

  

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

test.ksh中的代码

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

java -jar test.jar ${SCRIPT_ARG}

但是在java代码中,第三个参数正在被读取并打印为

  

"参数3

看起来很简单,但缺乏想法

1 个答案:

答案 0 :(得分:1)

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

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

#!/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"

而不是试图再嵌入任何引号。