【发布时间】:2012-05-26 06:21:07
【问题描述】:
如何将 shell 脚本的整个参数列表传递给程序?
例如,如果我有一个名为 JavaFoo 的 Java 程序,它可以接受任意数量的参数,并且应该在我的脚本中调用它。
如何将脚本的参数传递给 java 程序?
【问题讨论】:
标签: unix command-line-arguments
如何将 shell 脚本的整个参数列表传递给程序?
例如,如果我有一个名为 JavaFoo 的 Java 程序,它可以接受任意数量的参数,并且应该在我的脚本中调用它。
如何将脚本的参数传递给 java 程序?
【问题讨论】:
标签: unix command-line-arguments
在 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 "$@"。谢谢
shift 在这种特殊情况下会做什么?比如说,如果我使用以下命令 ./myscript a b c 调用脚本,那么脚本会去掉 0 参数(即 `myscript')并且只将 'a b c' 传递给我的 java 程序?