【问题标题】:Passing second argument onwards from a shell script to Java [duplicate]将第二个参数从 shell 脚本传递到 Java [重复]
【发布时间】:2011-04-29 01:07:30
【问题描述】:

如果我将任意数量的参数传递给在内部调用 Java 程序的 shell 脚本,我如何才能将第二个参数向前传递给 Java 程序,但第一个参数除外?

./my_script.sh a b c d ....

#my_script.sh
...
java MyApp b c d ...

【问题讨论】:

标签: bash


【解决方案1】:

首先使用shift“使用”第一个参数,然后传递"$@",即剩余参数列表:

#my_script.sh
...
shift
java MyApp "$@"

【讨论】:

  • 特殊参数@应该“总是”被引用:"$@",否则与$*没有区别。另外,需要提到的是shift之后,如果之前没有保存,第一个参数就丢失了。
  • @enzotib 谢谢,我引用了$@
  • 引用它不会导致所有参数作为单个参数传递,一个以空格分隔的参数列表吗?考虑到这个答案的受欢迎程度,我认为不会,但也许你可以解释一下。
  • @nilbus:$@ 是一个特殊参数,其行为与其他变量不同。见gnu.org/software/bash/manual/html_node/Special-Parameters.html
【解决方案2】:

您也可以在不使用“shift”的情况下继续传递第二个参数。

set -- 1 2 3 4 5

echo "${@:0}"
echo "${@:1}"
echo "${@:2}"   # here

【讨论】:

  • 不适用于sh,仅适用于bash。这称为子字符串扩展,对于@ 具有特殊行为。通常它会计算字符数,但对于 @ 它会计算参数。
  • 我在这里看到它被定义为“子字符串提取”:tldp.org/LDP/abs/html/string-manipulation.htmlSubstring Extraction ${string:position} Extracts substring from $string at $position. If the $string parameter is "*" or "@", then this extracts the positional parameters, [1] starting at $position.
猜你喜欢
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2022-09-27
  • 2018-09-05
相关资源
最近更新 更多