Bash betiğine iletilen bağımsız değişken sayısını nasıl bulabilirim?


182

Bash betiğine iletilen bağımsız değişken sayısını nasıl bulabilirim?

Şu anda sahip olduğum şey bu:

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done

Bunu yapmanın başka (daha iyi) yolları var mı?


4
Bu kod, herhangi bir bağımsız i+1değişken ivarsa , değişmez dizeyi değişkente depolar .
Philipp

Yanıtlar:



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"

Bana da yardımcı oldu, yapmaya çalıştığım şey; #! / bin / bash sayısı = 0 toplam = 0 ort = 0 için "$ @" do ((toplam + = $ var)) ((sayı ++)) bitti ((avg = toplam / $ sayı)) echo " sayıların toplamı: $ sum "echo" sayıların ortalaması: $ avg "hangi bilinmeyen sayıları almak ve bazı matematik yapmak için yardımcı olur (işlenen düzenleyebilirsiniz) Dennis Williamson için teşekkürler, ben yaptım. Kod için gönderiyorum çünkü birisi için yararlı olabilir.
kaan yılmaz

1
@ kaanyılmaz: Bununla ilgili tek sorun Bash'in tamsayı aritmetiği yapmasıdır. Ondalık basamaklar istiyorsanız, AWK bcveya başka bir şey kullanmanız gerekir (ksh93 ve zsh ondalık matematik de yapabilir). Kodunuz bazı değişkenler için dolar işareti içeriyor, ancak diğerleri için değil. Bunları kullanma konusunda tutarlı olmalısınız. İçeride (())gerekli değiller. Ancak bunlar echoifadelerdedir.
sonraki duyuruya kadar duraklatıldı.

Linux ile çok iyi değilim, sadece ihtiyacım olan kodunu değiştirdim. Temelde kodunuz
kaan yılmaz

Kod için teşekkürler, çok iyi.
Smeterlink

12

orijinal referansı eklemek için:

Özel parametreden bağımsız değişken sayısını alabilirsiniz $#. 0 değeri "bağımsız değişken yok" anlamına gelir. $#salt okunurdur.

Birlikte kullanıldığında shiftBağımsız değişken işleme için$# Bash Builtin shifther yürütüldüğünde özel parametre azaltılır .

görmek Bash bölümünde 3.4.2 Özel Parametreleri :

  • "Kabuk birkaç parametreye özel davranır. Bu parametrelere yalnızca başvurulabilir "

  • ve bu bölümde $ # anahtar kelimesi için "Ondalık konumsal parametre sayısını genişletir."


-1

Aşağıda kolay olanı -

kedi sayısı

echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'

Çıktı :

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

3
Olarak yazılabilirecho "$@" | awk '{print NF}'
user000001

-6

bu değer değişkende bulunur $#


4
Bunun dışında 4 yaşında neredeyse aynı (ama doğru) cevap var, cevabınız yanlış - öyle olmalı$#
nachteil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.