Procese todos los argumentos excepto el primero (en un script bash)

Tengo un script simple donde el primer argumento está reservado para el nombre de archivo, y todos los demás argumentos opcionales deben pasar a otras partes del script.

Utilizando Google, encontré esta wiki , pero proporcionaba un ejemplo literal:

echo "${@: -1}" 

No puedo hacer nada más para trabajar, como:

 echo "${@:2}" 

o

 echo "${@:2,1}" 

Recibo “Mala sustitución” de la terminal.

¿Cuál es el problema y cómo puedo procesar todo menos el primer argumento pasado a un script bash?

Utilizar esta:

 echo "${@:2}" 

La siguiente syntax:

 echo "${*:2}" 

funcionaría también, pero no se recomienda, porque como @Gordon ya explicó, que al usar * , ejecuta todos los argumentos juntos como un único argumento con espacios, mientras que @ conserva las interrupciones entre ellos (incluso si algunos de los argumentos son contener espacios). No hace la diferencia con el echo , pero es importante para muchos otros comandos.

Si quieres una solución que también funcione en /bin/sh try

 first_arg="$1" shift echo First argument: "$first_arg" echo Remaining arguments: "$@" 

shift [n] desplaza los parámetros posicionales n veces. Un shift establece el valor de $1 en el valor de $2 , el valor de $2 en el valor de $3 , y así sucesivamente, disminuyendo el valor de $# en uno.

http://wiki.bash-hackers.org/scripting/posparams

Explica el uso de shift (si desea descartar los primeros N parámetros) y luego implementa Mass Usage (busque el encabezado con ese título).