将第二个参数从shell脚本传递到Java

cm_*_*m_c 45 bash

如果我将任意数量的参数传递给在内部调用Java程序的shell脚本,那么除了第一个参数之外,如何将第二个参数传递给Java程序?

./my_script.sh abcd ....

#my_script.sh
...
java MyApp b c d ...
Run Code Online (Sandbox Code Playgroud)

Bol*_*olo 75

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

#my_script.sh
...
shift
java MyApp "$@"
Run Code Online (Sandbox Code Playgroud)

  • 特殊参数`@`应该"总是"引用:`"$ @"`,否则与`$*`没有区别.另外,应该提到的是,在`shift`之后,如果以前没有保存,第一个参数就会丢失. (4认同)
  • 不引用它会导致所有参数作为单个参数传递,这是一个以空格分隔的参数列表?考虑到这个答案的流行,我假设没有,但也许你可以解释一下. (4认同)
  • @nilbus:$ @是一个特殊参数,其行为与其他变量不同。参见https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html。 (2认同)

小智 41

您可以在不使用"shift"的情况下向前传递第二个参数.

set -- 1 2 3 4 5

echo "${@:0}"
echo "${@:1}"
echo "${@:2}"   # here
Run Code Online (Sandbox Code Playgroud)

  • 在`sh`中不起作用,只在`bash`中起作用.这称为子串扩展,对于`@`有一个特殊的行为.通常它会对字符进行计数,但对于`@`它会计算参数. (9认同)