Shell脚本和java参数
我在下面编写了调用java类的脚本run.sh:Shell脚本和java参数,java,shell,unix,command-line-arguments,Java,Shell,Unix,Command Line Arguments,我在下面编写了调用java类的脚本run.sh: java -cp . Main $1 $2 $3 $4 这是我的java类(它只显示参数): 除非我尝试传递一个包含空格的参数,否则这是有效的。例如: ./run.sh This is "a test" 将显示: This is a test 我如何修改shell脚本和/或更改参数语法以未经修改地通过参数“a测试”?如下所示: java -cp . Main "$@" 您还必须屏蔽脚本中的每个参数: java -cp . Main "$1
java -cp . Main $1 $2 $3 $4
这是我的java类(它只显示参数):
除非我尝试传递一个包含空格的参数,否则这是有效的。例如:
./run.sh This is "a test"
将显示:
This
is
a
test
我如何修改shell脚本和/或更改参数语法以未经修改地通过参数“a测试”?如下所示:
java -cp . Main "$@"
您还必须屏蔽脚本中的每个参数:
java -cp . Main "$1" "$2" "$3" "$4"
现在参数4应该是空的,而$3应该是“测试”
要验证,请尝试:
#!/bin/bash
echo 1 "$1"
echo 2 "$2"
echo 3 "$3"
echo 4 "$4"
echo all "$@"
叫它
./params.sh This is "a test"
1 This
2 is
3 a test
4
all This is a test
如果你能解释一下为什么这样做会有帮助。这是一个相当做作的例子。这可能不是他最终想要做的。参数4是空字符串这一事实令人恼火,因为java程序将收到错误数量的参数(4,而用户只传递了3)。“我认为伊格纳西奥的答案更好,谢谢你。”超级沙芬:哦,我明白了,我的测试不准确。在看到测试的输出后,我以为“$@”会使用屏蔽,但我猜这是最后一个回音,它会使用引号,就像Java程序一样。
./params.sh This is "a test"
1 This
2 is
3 a test
4
all This is a test