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
argc
dalam bahasa C-like, $#
akan terjadi 0
jika tidak ada argumen yang diteruskan ke skrip, 1
jika 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 echo
pernyataan.
untuk menambahkan referensi asli:
Anda bisa mendapatkan jumlah argumen dari parameter khusus $#
. Nilai 0 berarti "tidak ada argumen". $#
hanya baca.
Ketika digunakan bersama dengan shift
untuk pemrosesan argumen, parameter khusus $#
dikurangi setiap kali Bash Builtin shift
dijalankan.
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+1
dalam variabeli
jika ada argumen.