【问题标题】:Shell script and java parameterShell 脚本和 java 参数
【发布时间】:2012-05-21 13:47:11
【问题描述】:

我已经编写了下面的脚本 run.sh 用于调用 java 类:

java -cp . Main $1 $2 $3 $4

这是我的 java 类(它只显示参数):

public class Main {
    public static void main(String[] args) {
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

除非我尝试传递包含空格的参数,否则这是有效的。例如:

./run.sh This is "a test"

将显示:

This
is
a
test

如何修改我的 shell 脚本和/或更改我的参数语法以通过未修改的参数“a test”?

【问题讨论】:

    标签: java shell unix command-line-arguments


    【解决方案1】:

    像这样:

    java -cp . Main "$@"
    

    【讨论】:

    • 如果你解释了为什么这可能会有所帮助。这是一个非常人为的例子。这可能不是他最终想要做的。
    【解决方案2】:

    您还必须屏蔽脚本中的每个参数:

    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 个)。我认为伊格纳西奥的回答更好,无论如何,谢谢。
    • @SuperChafouin:哦,我明白了,我的测试不准确。在看到我的测试输出后,我认为“$@”会消耗掩码,但我想这是最后一个回显,它消耗引号,就像 Java 程序一样。
    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 2015-06-02
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多