2010-10-22 3 views
38

Si je transmets un nombre quelconque d'arguments à un script shell invoquant un programme Java en interne, comment puis-je passer le second argument au programme Java sauf le premier?Passage du deuxième argument d'un script shell à Java

./my_script.sh ABCD ....

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

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

Répondre

58

Première utilisation shift à "consommer" le premier argument, puis passer "[email protected]", à savoir la liste des arguments restants:

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

Le paramètre spécial '' @ devrait " toujours "être cité:' "$ @" ', sinon n'est pas différent de' $ * '. En outre, il convient de mentionner qu'après le 'shift', si ce n'est déjà enregistré, le premier paramètre est perdu. – enzotib

+0

@enzotib Merci, j'ai cité '$ @'. – Bolo

+3

Ne pas le citer provoque-t-il que tous les arguments soient passés en un seul argument, une liste d'arguments séparés par des espaces? Je suppose que non, compte tenu de la popularité de cette réponse, mais peut-être que vous pouvez expliquer. –

31

Vous pouvez passer le second argument sans utiliser "shift".

set -- 1 2 3 4 5 

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

ne fonctionne pas dans 'sh', seulement' bash'. C'est ce qu'on appelle une extension de sous-chaîne et a un comportement spécial pour '@'. Habituellement, il compte les caractères, mais pour '@' il compte les paramètres. – lesmana

Questions connexes