0

我写了一个简短的 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 类只需要三个总参数。

有没有人对为什么或如何使论点正确通过有任何想法?

4

1 回答 1

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"
于 2012-10-19T15:37:17.260 回答