Come posso trovare il numero di argomenti passati a uno script Bash?


182

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?


4
Tale codice memorizzerebbe semplicemente la stringa letterale i+1nella variabile ise sono presenti argomenti.
Philipp,

Risposte:



99
#!/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"

Mi ha aiutato anche, cosa che stavo cercando di fare è; #! / bin / bash count = 0 sum = 0 avg = 0 per var in "$ @" do ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " la somma dei numeri è: $ sum "echo" la media dei numeri è: $ avg "che mi aiuta a ottenere numeri sconosciuti di argomenti e fare un po 'di matematica (puoi modificare l'operando) Grazie per Dennis Williamson, l'ho fatto. Sto postando sul codice perché potrebbe essere utile per qualcuno.
Kaan Yimlaz,

1
@ kaanyılmaz: l'unico problema è che Bash esegue solo l'aritmetica intera. Se vuoi i decimali, dovrai usare AWK 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 echodichiarazioni.
In pausa fino a nuovo avviso.

Non sono molto bravo con Linux, ho appena modificato il tuo codice secondo necessità. In pratica è il tuo codice
kaan yılmaz

Grazie per il codice, è molto buono.
Smeterlink

12

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 shiftall'elaborazione dell'argomento, il parametro speciale $#viene decrementato ogni volta che shiftviene 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."


-1

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

3
Potrebbe essere scritto comeecho "$@" | awk '{print NF}'
user000001

-6

quel valore è contenuto nella variabile $#


4
A parte il fatto che c'è quasi la stessa (ma corretta) risposta che ha 4 anni, la tua risposta è sbagliata - dovrebbe essere$#
nachteil
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.