我很难从使用嵌套变量的 shell 脚本 (bash) 启动 java 程序。基本上有许多系统和 -D java 属性需要传递给 java 程序。我想以一种更好的方式将它们一个接一个地组织起来,因为它们排成一行时很难阅读。
这类似于 "Passing a space-separated System Property via a shell script doesn't work "但不一样。
这是一个精简的示例。想象一个像这样的 java 程序:
public class Main {
public static void main(String[] args) {
for (String s : args) {
System.out.println(s);
}
}
}
像这样调用时:
java Main "First_Line""Second line with spaces"
它会给出如下响应的 OK 结果:
First_Line Second line with spaces
但是如果使用这样的脚本:
#!/bin/sh
PARAM01="FirstLine"
PARAM02="Second line with spaces"
PARAMS="$PARAM01 $PARAM02"
java Main $PARAMS
然后所有空格都被吃掉,第二个参数不加引号传递给java。结果如下所示:
FirstLine Second line with spaces
曾尝试在 shell 脚本中以不同方式引用变量,但到目前为止没有成功。如何引用 shell 变量以便保留空格并将参数原封不动地传递给 java?
最佳答案
如果您在命令行中放置一个 shell 变量未加引号,那么它会进行分词。为防止单词拆分,请将每个参数放在双引号中:
java Main "$PARAM01" "$PARAM02"
或者,如果你想花哨点,使用数组:
PARAMS=("$PARAM01" "$PARAM02")
java Main "${PARAMS[@]}"
关于java - 通过 shell 传递以空格分隔的系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619615/