2010-10-22 153 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

相關問題