2010-10-22 117 views
38

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

./my_script.sh ABCD ....

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

相关:http://stackoverflow.com/questions/28057815/how-to-get-second-to-last-argument-from-previous-bash-command – 2016-08-23 18:44:25

回答

58

首先使用shift “消费” 的第一个参数,然后通过"[email protected]",即剩余的参数列表:

#my_script.sh 
... 
shift 
java MyApp "[email protected]" 
+4

特殊参数'@'应该“总是“被引用:'”$ @“',否则与'$ *'没有区别。另外,应该提到的是,在'shift'之后,如果先前未保存,则第一个参数丢失。 – enzotib 2010-10-22 10:37:57

+0

@enzotib谢谢,我引用了'$ @'。 – Bolo 2010-10-22 10:58:52

+3

不引用它会导致所有参数作为单个参数传递,即空格分隔参数列表?鉴于这个答案的受欢迎程度,我假设没有,但也许你可以解释。 – 2014-08-14 13:17:51

31

你可以在不使用“shift”的情况下向前传递第二个参数。

set -- 1 2 3 4 5 

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

在'sh'中不起作用,只有'bash'。这称为子字符串扩展,对'@'有特殊的作用。通常它会对字符进行计数,但对于@来说,它会计算参数。 – lesmana 2010-10-22 13:46:57

相关问题