我写了一个简短的 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 类只需要三个总参数。
有没有人对为什么或如何使论点正确通过有任何想法?