【发布时间】: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
如果我将任意数量的参数传递给在内部调用 Java 程序的 shell 脚本,我如何才能将第二个参数向前传递给 Java 程序,但第一个参数除外?
./my_script.sh a b c d ....
#my_script.sh
...
java MyApp b c d ...
【问题讨论】:
标签: bash
首先使用shift“使用”第一个参数,然后传递"$@",即剩余参数列表:
#my_script.sh
...
shift
java MyApp "$@"
【讨论】:
@应该“总是”被引用:"$@",否则与$*没有区别。另外,需要提到的是shift之后,如果之前没有保存,第一个参数就丢失了。
$@。
您也可以在不使用“shift”的情况下继续传递第二个参数。
set -- 1 2 3 4 5
echo "${@:0}"
echo "${@:1}"
echo "${@:2}" # here
【讨论】:
sh,仅适用于bash。这称为子字符串扩展,对于@ 具有特殊行为。通常它会计算字符数,但对于 @ 它会计算参数。
Substring 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.