Come passare tutti gli argomenti passati al mio script bash a una mia funzione?

Diciamo che ho definito una function abc() che gestirà tutta la logica relativa all’analisi degli argomenti passati al mio script.

Come posso passare tutti gli argomenti che il mio script bash ha ricevuto? Il numero di parametri è variabile, quindi non posso semplicemente codificare gli argomenti passati in questo modo:

 abc $1 $2 $3 $4 

Modifica Meglio ancora, esiste un modo per la mia funzione di avere accesso alle variabili degli argomenti dello script?

Pet peeve: quando usi [email protected] , dovresti (quasi) metterlo tra virgolette per evitare il misparsing dell’argomento con spazi in esse:

 abc "[email protected]" 

Avevo bisogno di una variazione su questo, che mi aspetto sarà utile per gli altri:

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

La parte "${@:3}" significa tutti i membri dell'array a partire da 3. Quindi questa funzione implementa una diff ordinata passando i primi due argomenti a diff attraverso sort e passando tutti gli altri argomenti a diff, quindi puoi chiamalo allo stesso modo di diff:

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

Usa la variabile [email protected] , che si espande su tutti i parametri della riga di comando separati da spazi.

 abc "[email protected]" 

Ecco un semplice script:

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

$# è il numero di argomenti ricevuti dallo script. Trovo più facile accedervi usando un array: la riga args=("[email protected]") mette tutti gli argomenti nell’array degli args . Per accedervi utilizzare ${args[index]} .

Vale la pena ricordare che è ansible specificare intervalli di argomenti con questa syntax.

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

Non l’avevo visto menzionato.

 abc "[email protected]" 

[email protected] rappresenta tutti i parametri dati al tuo script bash.