2010-10-22 6 views
38

Si paso cualquier cantidad de argumentos a un script de shell que invoca un programa Java internamente, ¿cómo puedo pasar el segundo argumento al programa Java excepto el primero?Pasando el segundo argumento en adelante desde un script de shell a Java

./my_script.sh abcd ....

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

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

Respuesta

58

Primer uso shift a "consumir" el primer argumento, a continuación, pasar "[email protected]", es decir, la lista de argumentos restantes:

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

El parámetro especial '' @ debería " siempre "se cotiza:' "$ @" ', de lo contrario no es diferente de' $ * '. Además, debe mencionarse que después del 'shift', si no se guardó previamente, se pierde el primer parámetro. – enzotib

+0

@enzotib Gracias, he citado '$ @'. – Bolo

+3

¿No lo cita al hacer que todos los argumentos pasen como un solo argumento, una lista de argumentos separados por espacios? Supongo que no, dada la popularidad de esta respuesta, pero tal vez puedas explicarlo. –

31

Puede pasar el segundo argumento en adelante sin usar "shift" también.

set -- 1 2 3 4 5 

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

no funciona en 'sh', solo' bash'. esto se llama expansión de subcadena y tiene un comportamiento especial para '@'. generalmente cuenta los caracteres, pero para '@' cuenta los parámetros. – lesmana

Cuestiones relacionadas