sirve scripts script que programacion pasar parametros para operaciones manejo ejemplos cadenas aritmeticas bash function parameter-passing

scripts - ¿Cómo pasar todos los argumentos pasados a mi script de bash a una función mía?



programacion en shell (6)

Digamos que he definido una function abc() que manejará toda la lógica relacionada con analizar los argumentos pasados ​​a mi script.

¿Cómo puedo pasar todos los argumentos que mi script de bash ha recibido? El número de parámetros es variable, por lo que no puedo simplemente codificar los argumentos pasados ​​de esta manera:

abc $1 $2 $3 $4

Editar Mejor aún, ¿hay alguna forma para que mi función tenga acceso a las variables de los argumentos del script?


Aquí hay un script simple:

#!/bin/bash args=("$@") echo Number of arguments: $# echo 1st argument: ${args[0]} echo 2nd argument: ${args[1]}

$# es el número de argumentos recibidos por el script. Encuentro más fácil acceder a ellos usando una matriz: la línea args=("$@") coloca todos los argumentos en la matriz args . Para acceder a ellos use ${args[index]} .


Necesitaba una variación de esto, que espero sea útil para otros:

function diffs() { diff "${@:3}" <(sort "$1") <(sort "$2") }

La parte "${@:3}" significa que todos los miembros de la matriz comienzan en 3. Por lo tanto, esta función implementa un diff ordenado al pasar los primeros dos argumentos a través del ordenamiento y luego pasar todos los otros argumentos a diff, para que pueda llamémoslo similarmente a diff:

diffs file1 file2 [other diff args, e.g. -y]


Un motivo para mascotas: cuando use $@ , debería (casi) siempre ponerlo entre comillas dobles para evitar errores de discusión con espacios en ellos:

abc "$@"


Use la variable $@ , que se expande a todos los parámetros de la línea de comandos separados por espacios.

abc "$@"


Vale la pena mencionar que puede especificar rangos de argumentos con esta sintaxis.

function example() { echo "line1 ${@:1:1}"; #First argument echo "line2 ${@:2:1}"; #Second argument echo "line3 ${@:3}"; #Third argument onwards }

No lo había visto mencionado.


abc "$@"

$@ representa todos los parámetros dados a su script de bash.