scripts script programas manejo ejemplos ejecutar comandos cadenas bash shell

programas - Procesa todos los argumentos excepto el primero(en un script de bash)



scripts bash ejemplos (3)

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

Usando Google encontré este wiki , pero proporcionó un ejemplo literal:

echo "${@: -1}"

No consigo que nada más funcione, como:

echo "${@:2}"

o

echo "${@:2,1}"

Obtengo "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 de bash?


Si desea una solución que también funcione en /bin/sh intente

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

shift [n] cambia 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.


Utilizar esta:

echo "${@:2}"

La siguiente sintaxis:

echo "${*:2}"

funcionaría igual de bien, pero no se recomienda, porque como ya explicó @Gordon , que al usar * , ejecuta todos los argumentos juntos como un solo argumento con espacios, mientras que @ conserva las rupturas entre ellos (incluso si algunos de los mismos argumentos contienen espacios). No hace la diferencia con echo , pero es importante para muchos otros comandos.