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.
http://wiki.bash-hackers.org/scripting/posparams
Explica el uso de shift
(si desea descartar los primeros parámetros N) y luego la implementación del uso masivo (busque el título con ese título).