Bash Funciones con argumentos.


Ejemplo

En helloJohn.sh :

#!/bin/bash

greet() {
  local name="$1"
  echo "Hello, $name"
}

greet "John Doe"
# running above script
$ bash helloJohn.sh
Hello, John Doe
  1. Si no modifica el argumento de ninguna manera, no es necesario copiarlo en una variable local , simplemente haga echo "Hello, $1" .

  2. Puede usar $1 , $2 , $3 y así sucesivamente para acceder a los argumentos dentro de la función.

    Nota: para argumentos más de 9 $10 no funcionarán (bash lo leerá como $ 1 0), debe hacer ${10} , ${11} y así sucesivamente.

  3. $@ refiere a todos los argumentos de una función:

    #!/bin/bash
    foo() {
      echo "$@"
    }
    
    foo 1 2 3 # output => 1 2 3
    

    Nota: Prácticamente siempre debe usar comillas dobles alrededor de "$@" , como aquí.

    Omitir las comillas hará que el shell amplíe los comodines (incluso cuando el usuario los haya citado específicamente para evitar eso) y, en general, introduzca comportamientos no deseados y posiblemente incluso problemas de seguridad.

    foo "string with spaces;" '$HOME' "*"
    # output => string with spaces; $HOME *
    
  4. para los argumentos predeterminados use ${1:-default_val} . P.ej:

    #!/bin/bash
    foo() {
      local val=${1:-25}
      echo "$val"
    }
    
    foo     # output => 25
    foo 30  # output => 30
    
  5. para requerir un argumento usa ${var:?error message}

    foo() {
      local val=${1:?Must provide an argument}
      echo "$val"
    }