【问题标题】:shell script with variable length parameters具有可变长度参数的 shell 脚本
【发布时间】:2012-05-26 06:21:07
【问题描述】:

如何将 shell 脚本的整个参数列表传递给程序?

例如,如果我有一个名为 JavaFoo 的 Java 程序,它可以接受任意数量的参数,并且应该在我的脚本中调用它。

如何将脚本的参数传递给 java 程序?

【问题讨论】:

    标签: unix command-line-arguments


    【解决方案1】:

    在 Bash 中:

    #!/usr/bin/env bash
    java /path/to/JavaFoo "$@"
    

    将所有参数单独引用为传递给 Bash 脚本本身。 也适用于 Dash,但我不知道其他与 Bourne 兼容的 shell。

    假设你想将除第一个参数之外的所有参数传递给 Java 程序,使用 shift,如下所示:

    #!/usr/bin/env bash
    shift
    java /path/to/JavaFoo "$@"
    

    如果需要,在传递参数之前使用更多shift 实例去除更多参数。

    假设你调用shell脚本(myscript)如下:

    ./myscript a b c
    

    shift 将摆脱 a。再添加一个shift,它也会去掉b。脚本本身的名称不包含在 "$@" 中,即使您可以在许多 shell 中以 $0 访问它。

    【讨论】:

    • 是的,添加这个对我有用:java JavaFoo "$@"。谢谢
    • 糟糕,抱歉。我假设 Java 文件有一个 hashbang :)
    • shift 在这种特殊情况下会做什么?比如说,如果我使用以下命令 ./myscript a b c 调用脚本,那么脚本会去掉 0 参数(即 `myscript')并且只将 'a b c' 传递给我的 java 程序?
    • 现在很有意义。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多