All'interno del mio script bash, vorrei analizzare zero, uno o due parametri (lo script può riconoscerli), quindi inoltrare i parametri rimanenti a un comando invocato nello script. Come lo posso fare?
All'interno del mio script bash, vorrei analizzare zero, uno o due parametri (lo script può riconoscerli), quindi inoltrare i parametri rimanenti a un comando invocato nello script. Come lo posso fare?
Risposte:
Utilizzare il shiftcomando integrato per "mangiare" gli argomenti. Quindi chiama il processo figlio e passagli l' "$@"argomento per includere tutti gli argomenti rimanenti. Si noti che le virgolette devono essere mantenute, poiché causano la corretta quotazione dell'espansione dell'elenco degli argomenti.
$@tratta essenzialmente ogni elemento dell'array come una stringa tra virgolette: vengono passati senza possibilità di espansione. Assicura inoltre che ognuno sia visto come una parola separata. Questa spiegazione insieme a uno script di prova che dimostra la differenza è qui: tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash usa il comando shift :
ad es. shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 produce
1
2 3
$1senza citarli come "$1", allora la shell eseguirà la divisione delle parole, quindi ad esempio foo barverrà inoltrata come fooe barseparatamente.
Bash supporta i parametri di subsetting (consultare Sottoinsiemi e sottostringhe ), quindi puoi scegliere quali parametri elaborare / passare in questo modo.
apri il nuovo file e modificalo: vim r.sh:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"eseguirlo:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10il risultato è:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10