我编写了一个简短的 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 类时,我只是得到(如果使用上述默认值)“参数名称无法识别”。
在 echo
周围使用转义引号在第 3 行和第 4 行,我看到变量设置正确,并且它们的回显如下所示: "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 类只需要三个参数。
有人知道为什么或如何使论点正确通过吗?
最佳答案
问题是您引用了 "
,这阻止了它引用参数。只需删除反斜杠,您就应该设置:
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"
关于java - Shell 参数未正确传递给 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977557/