Bagaimana cara menemukan jumlah argumen yang diteruskan ke skrip Bash?
Inilah yang saya miliki saat ini:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Apakah ada cara lain yang lebih baik untuk melakukan ini?
Bagaimana cara menemukan jumlah argumen yang diteruskan ke skrip Bash?
Inilah yang saya miliki saat ini:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Apakah ada cara lain yang lebih baik untuk melakukan ini?
Jawaban:
Jumlah argumen adalah $#
Cari di halaman ini untuk mempelajari lebih lanjut: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argcdalam bahasa C-like, $#akan terjadi 0jika tidak ada argumen yang diteruskan ke skrip, 1jika ada satu argumen, dll.
#!/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,, atau yang lainnya (ksh93 dan zsh juga bisa melakukan matematika desimal). Kode Anda termasuk tanda dolar untuk beberapa variabel, tetapi tidak yang lain. Anda harus konsisten dalam menggunakannya atau tidak. Di dalam (())mereka tidak perlu. Mereka, bagaimanapun, dalam echopernyataan.
untuk menambahkan referensi asli:
Anda bisa mendapatkan jumlah argumen dari parameter khusus $#. Nilai 0 berarti "tidak ada argumen". $#hanya baca.
Ketika digunakan bersama dengan shiftuntuk pemrosesan argumen, parameter khusus $#dikurangi setiap kali Bash Builtin shiftdijalankan.
lihat Manual Referensi Bash di bagian 3.4.2 Parameter Khusus :
"Shell memperlakukan beberapa parameter secara khusus. Parameter ini hanya dapat dirujuk "
dan di bagian ini untuk kata kunci $ # "Perluas jumlah parameter posisi dalam desimal."
Di bawah ini adalah yang mudah -
cat countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Output:
#./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+1dalam variabelijika ada argumen.