Bash Funziona con argomenti


Esempio

In helloJohn.sh :

#!/bin/bash

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

greet "John Doe"
# running above script
$ bash helloJohn.sh
Hello, John Doe
  1. Se non si modifica l'argomento in alcun modo, non è necessario copiarlo su una variabile local - semplicemente echo "Hello, $1" .

  2. Puoi usare $1 , $2 , $3 e così via per accedere agli argomenti all'interno della funzione.

    Nota: per argomenti più di 9 $10 non funzioneranno (bash lo leggerà come $ 1 0), devi fare ${10} , ${11} e così via.

  3. $@ riferisce a tutti gli argomenti di una funzione:

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

    Nota: dovresti praticamente sempre usare le virgolette doppie intorno a "$@" , come qui.

    Omettendo le virgolette, la shell espanderà i caratteri jolly (anche quando l'utente li ha espressamente citati per evitarlo) e in genere introdurrà comportamenti indesiderati e potenzialmente problemi di sicurezza.

    foo "string with spaces;" '$HOME' "*"
    # output => string with spaces; $HOME *
    
  4. per gli argomenti predefiniti usa ${1:-default_val} . Per esempio:

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

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