Shell参数没有正确传递给Java类

时间:2012-10-19 15:28:33

标签: 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类时,我只是回过头来(如果使用了上面的默认值)“参数名称无法识别”。

对于第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类只需要三个参数。

有没有人对为什么或如何正确传递参数有任何想法?

1 个答案:

答案 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"