2010-12-12 14 views
131

Come si trova il numero di argomenti passati a uno script Bash?Come si trova il numero di argomenti passati a uno script Bash?

Questo è quello che ho attualmente:

#!/bin/bash 
i=0 
for var in "[email protected]" 
do 
    i=i+1 
done 

Ci sono altri (migliore) modi di fare questo?

+3

Quel codice sarebbe semplicemente memorizzare la stringa letterale 'i + 1' nella variabile' I' se tutti gli argomenti sono presenti. – Philipp

+0

@ TheConstructor: basta osservare il record dell'OP, cioè 2 post in circa 5,5 anni e solo l'accumulo passivo di karma (il 95% dei quali su questa domanda). Non penso davvero che possa essere considerato un utente attivo o che dia una cappa fighissima sul conferire una risposta accettata a chiunque abbia aiutato. La sua domanda era perfettamente legittima e ha aiutato gli altri che hanno una simile mancanza di pratica nel fare "man bash". Quindi, vivi e lascia vivere ;-) – Cbhihe

+0

@Cbhihe Ho pensato di provare allora. OP può ancora leggere e vedere la notifica. Ho ricevuto l'eroe "unusung hero" e di solito non provo a ricordare agli OP di accettare la mia risposta. Sarei comunque orgoglioso, se uno di loro alla fine accettasse la mia risposta, comunque. – TheConstructor

risposta

82
#!/bin/bash 
echo "The number of arguments is: $#" 
a=${@} 
echo "The total length of all arguments is: ${#a}: " 
count=0 
for var in "[email protected]" 
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" 
+4

+1 per un lavoro esempio! nice – MountainX

+0

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

+1

@ kaanyılmaz: l'unico problema è che Bash esegue solo l'aritmetica dei numeri interi. Se vuoi i decimali, dovrai usare AWK, 'bc' o qualcos'altro (ksh93 e zsh possono anche fare calcoli decimali). Il tuo codice include i simboli del dollaro per alcune variabili, ma non per altre. Dovresti essere coerente nell'usarli o meno. All'interno '(())' non sono necessari. Sono, tuttavia, nelle dichiarazioni di "eco". –

-4

tale valore è contenuto nella variabile $#

+2

A parte il fatto che c'è una risposta quasi esatta (ma corretta) che ha 4 anni, la tua risposta è sbagliata - dovrebbe essere '$ #' – nachteil

1

Di seguito è quella facile -

cat countvariable.sh

echo "[email protected]" |awk '{for(i=0;i<=NF;i++); print i-1 }' 

uscita:

#./countvariable.sh 1 2 3 4 5 6 
6 
#./countvariable.sh 1 2 3 4 5 6 apple orange 
8 
+0

Potrebbe essere scritto come 'echo" $ @ "| awk '{print NF}' ' – user000001

Problemi correlati