2010-10-22 12 views
38

Se si passa un numero qualsiasi di argomenti a uno script di shell che richiama internamente un programma Java, come posso passare il secondo argomento in avanti al programma Java tranne il primo?Passare il secondo argomento in poi da uno script di shell a Java

./my_script.sh abcd ....

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

correlati: http://stackoverflow.com/questions/28057815/how-to-get-second-to-last-argument-from-previous-bash-command –

risposta

58

Primo utilizzo shift a "consumare" il primo argomento, quindi passare "[email protected]", vale a dire, l'elenco degli argomenti restanti:

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

Il parametro speciale '@' dovrebbe " sempre "quotato:' "$ @" ', altrimenti non è diverso da' $ * '. Inoltre, dovrebbe essere detto che dopo lo 'shift', se non precedentemente salvato, il primo parametro viene perso. – enzotib

+0

@enzotib Grazie, ho citato '$ @'. – Bolo

+3

Non citarlo fa sì che tutti gli argomenti vengano passati come un singolo argomento, una lista di argomenti separati da spazio? Presumo di no, data la popolarità di questa risposta, ma forse puoi spiegare. –

31

È possibile passare il secondo argomento in poi senza utilizzare "shift".

set -- 1 2 3 4 5 

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

non funziona in 'sh', solo' bash'. questa è chiamata espansione della sottostringa e ha un comportamento speciale per '@'. di solito conta i caratteri, ma per '@' conta i parametri. – lesmana

Problemi correlati