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.