java - Shell 参数未正确传递给 Java 类

标签 java shell unix parameter-passing

我编写了一个简短的 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/

相关文章:

php - 获取特定运行的 PHP 脚本的 CPU 使用率

java - 使用 Java 有选择地解析日志文件

linux - 为什么这个 unix shell 代码会这样工作?

bash - 这些流重定向如何工作?

python - 将信息从一个脚本传递到另一个脚本

linux - := and += in make file?有什么区别

java - Java (Android) 中的 Debug模式(正则表达式)失败

java - 有充分的理由阻止在队列中的堆栈中使用 .peek() 吗?

java - Tomcat 8 无法创建 Java jli.dll

java - 如何在不返回 size = 0 的情况下获取 ArrayList 的值?