ssa*_*asa 1 java bash shell jvm-arguments command-line-arguments
我很难从使用嵌套变量的shell脚本(bash)启动java程序.基本上有许多系统和-D java属性需要传递给java程序.我想以一种更好的方式组织它们,因为它们在一行中很难阅读.
这类似于" 通过shell脚本传递空格分隔的系统属性不起作用 "但不相同.
这是一个精简的样本.想象一下像这样的java程序:
public class Main {
public static void main(String[] args) {
for (String s : args) {
System.out.println(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当像这样调用它时:
java Main "First_Line" "Second line with spaces"
它会像这样的响应给出OK结果:
Run Code Online (Sandbox Code Playgroud)First_Line Second line with spaces
但是,如果使用这样的脚本:
#!/bin/sh
PARAM01="FirstLine"
PARAM02="Second line with spaces"
PARAMS="$PARAM01 $PARAM02"
java Main $PARAMS
Run Code Online (Sandbox Code Playgroud)
然后吃掉所有空格,第二个参数不加引号传递给java.结果如下所示:
Run Code Online (Sandbox Code Playgroud)FirstLine Second line with spaces
试图在shell脚本中引用不同的变量,但到目前为止还没有成功.如何引用shell变量以保留空格并将参数完整地传递给java?
如果在命令行上放置一个shell变量不加引号,那么它会进行单词拆分.要防止该单词拆分,请将每个参数保留为双引号:
java Main "$PARAM01" "$PARAM02"
Run Code Online (Sandbox Code Playgroud)
或者,如果你想获得幻想,请使用数组:
PARAMS=("$PARAM01" "$PARAM02")
java Main "${PARAMS[@]}"
Run Code Online (Sandbox Code Playgroud)