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

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

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

 abc $1 $2 $3 $4 

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

Lo que más le molesta: cuando usa $@ , debe (casi) ponerlo siempre entre comillas dobles para evitar una mala comparación de argumentos con espacios en ellos:

 abc "$@" 

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

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

La parte "${@:3}" significa todos los miembros de la matriz que comienzan en 3. Entonces esta función implementa una diferencia ordenada pasando los primeros dos argumentos a diff a través de la clasificación y luego pasa todos los demás argumentos a diff, para que pueda llamarlo de manera similar a diff:

 diffs file1 file2 [other diff args, eg -y] 

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

 abc "$@" 

Aquí hay un script simple:

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

$# es la cantidad de argumentos recibidos por el script. Me resulta 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, usa ${args[index]} .

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

 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 bash.