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ı?
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ı?
Yanıtlar:
Argüman sayısı: $#
Daha fazla bilgi için bu sayfada arama yapın: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
C benzeri dilde $#
olacak 0
komut geçirilen hiçbir argümanlar, varsa 1
vb bir argüman, varsa
#!/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
veya 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 echo
ifadelerdedir.
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 shift
Bağımsız değişken işleme için$#
Bash Builtin shift
her 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."
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
echo "$@" | awk '{print NF}'
i+1
değişkeni
varsa , değişmez dizeyi değişkente depolar .