Così ho uno script bash che ha bisogno di prendere un numero arbitrario di argomenti della riga di comando e metterli in una singola stringaafferrare tutti argomenti che seguono argomento ennesima e concatenare insieme in bash
Esempio di ciò che l'utente digiterà in:
give <environment> <email> <any number of integers separated by spaces>
give testing [email protected] 1 2 3 4 5
Voglio ottenere tutti gli argomenti da $ 3 a $ # e concatenarli in una stringa.
La mia soluzione (probabilmente terribile) in questo momento è
if [ $# -gt 3 ]
then
env="env="$1
email="email="$2
entList=""
for i in {3..$#}
do
if [ $i -eq 3 ]
then
entList=$3
shift
fi;
if [ $i -gt 3 ]
then
entList=$entList","$3
shift
fi;
done
fi;
ho gestire il caso di avere solo tre argomenti un po 'diverso, e che uno funziona bene.
valore finale $entList
dato l'esempio give testing [email protected] 1 2 3 4 5
dovrebbe essere: 1,2,3,4,5
In questo momento quando ho eseguito questo ho i seguenti errori:
/usr/local/bin/ngive.sh: line 29: [: {3..5}: integer expression expected
/usr/local/bin/ngive.sh: line 34: [: {3..5}: integer expression expected
Linee 29 e 34 sono:
line 29: if [ $i -eq 3 ]
line 34: if [ $i -gt 3 ]
Qualsiasi aiuto sarebbe apprezzato.
Una soluzione comune è salvare i primi 3 argomenti, ad esempio in variabili: 'var1 =" $ 1 "; var2 = "$ 2"; var3 = "$ 3" 'e quindi usare' shift 3' per rimuovere i primi 3 argomenti, e successivamente usare '" $ * "' per creare una singola stringa contenente gli altri parametri, separati da spazio: 'rest =" $ * "' . –