【发布时间】:2014-05-02 09:54:04
【问题描述】:
我无法从使用嵌套变量的 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"
它会给出这样的响应:
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?
【问题讨论】:
-
使用引号:
java Main "$PARAMS" -
我认为这是 shell 脚本的一个已知问题。修复可能很棘手。你能传递一个文件而不是带空格的字符串吗?
-
java Main "$PARAMS" 不起作用。它将所有输出放在一行中。
-
@GiovanniBotta,只有不使用现代扩展(例如数组)的 shell 脚本存在问题。
标签: java bash shell command-line-arguments jvm-arguments