我编写了一个简短的shell脚本,它接受参数,检查它们(因为它们是“可选的”,如果它们是空的,则设置默认值),并将它们传递给服务器上的Java类。基本上,就像这样:
x=${2:-'Default'}
y=${3:-'Default Name Has Spaces'}
echo \"$x\"
echo \"$y\"
java -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 \"$x\" \"$y\"
但是,当shell调用Java类时,我只是回过头来(如果使用了上面的默认值)“参数名称无法识别”。
对于第3行和第4行echo
周围的转义引号,我看到变量设置正确并且它们如下所示:"Default"
和"Default Name Has Spaces"
,但即使使用Java调用中的转义引号,它们似乎也传递了两个以上的参数 - 就像它们被传递为java -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 Default Default Name Has Spaces"
一样失败,因为Java类只需要三个参数。
有没有人对为什么或如何正确传递参数有任何想法?
答案 0 :(得分:4)
问题是你引用"
,这会阻止它引用参数。只需删除反斜杠,就应该设置:
x=${2:-'Default'}
y=${3:-'Default Name Has Spaces'}
echo "$x"
echo "$y"
java -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 "$x" "$y"