Come posso trovare il numero di argomenti passati a uno script Bash?
Questo è quello che ho attualmente:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Ci sono altri (migliori) modi per farlo?
Come posso trovare il numero di argomenti passati a uno script Bash?
Questo è quello che ho attualmente:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Ci sono altri (migliori) modi per farlo?
Risposte:
Il numero di argomenti è $#
Cercalo in questa pagina per saperne di più: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
linguaggi di tipo C, $#
sarà 0
se non ci sono argomenti passati alla sceneggiatura, 1
se c'è un argomento, ecc.
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
do
echo "The length of argument '$var' is: ${#var}"
(( count++ ))
(( accum += ${#var} ))
done
echo "The counted number of arguments is: $count"
echo "The accumulated length of all arguments is: $accum"
bc
, o qualcos'altro (ksh93 e zsh possono anche fare calcoli decimali). Il codice include segni di dollaro per alcune variabili, ma non altre. Dovresti essere coerente nell'usarli o meno. All'interno (())
non sono necessari. Sono, tuttavia, nelle echo
dichiarazioni.
per aggiungere il riferimento originale:
È possibile ottenere il numero di argomenti dal parametro speciale $#
. Il valore 0 indica "nessun argomento". $#
è di sola lettura.
Se utilizzato insieme shift
all'elaborazione dell'argomento, il parametro speciale $#
viene decrementato ogni volta che shift
viene eseguito Bash Builtin .
vedere il Manuale di riferimento di Bash nella sezione 3.4.2 Parametri speciali :
"La shell tratta diversi parametri appositamente. Questi parametri possono essere referenziati solo "
e in questa sezione per la parola chiave $ # "Espande il numero di parametri posizionali in decimale."
Di seguito è quello facile -
cat countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Produzione :
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8
echo "$@" | awk '{print NF}'
i+1
nella variabilei
se sono presenti argomenti.