我正在做一个简单的工作,将我的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
看起来很简单,但缺乏想法
答案 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"
而不是试图再嵌入任何引号。