Untuk memperjelas: tidak seperti argcdalam bahasa C-like, $#akan terjadi 0jika tidak ada argumen yang diteruskan ke skrip, 1jika ada satu argumen, dll.
Vladimir Panteleev
99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0for 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"
Itu membantu saya juga, yang saya coba lakukan adalah; #! / bin / hitungan bash = 0 jumlah = 0 rata-rata = 0 untuk var di "$ @" do ((jumlah + = $ var)) ((jumlah ++)) selesai ((rata-rata = jumlah / $ jumlah)) gema " jumlah angka-angka adalah: $ jumlah "gema" rata-rata angka-angka adalah: $ rata-rata "yang membantu saya untuk mendapatkan jumlah args yang tidak diketahui dan melakukan beberapa matematika (Anda dapat mengedit operan) Terima kasih untuk Dennis Williamson, saya melakukannya. Saya memposting ke kode karena mungkin bermanfaat bagi seseorang.
kaan yılmaz
1
@ kaanyılmaz: Satu-satunya masalah dengan itu adalah bahwa Bash hanya melakukan aritmatika integer. Jika Anda ingin desimal, Anda harus menggunakan AWK 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.
Dijeda sampai pemberitahuan lebih lanjut.
Saya tidak terlalu baik dengan linux, saya baru saja memodifikasi kode Anda seperti yang saya butuhkan. Ini pada dasarnya adalah kode Anda
kaan yılmaz
Terima kasih untuk kodenya, ini sangat bagus.
Smeterlink
12
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.
i+1
dalam variabeli
jika ada argumen.Jawaban:
Jumlah argumen adalah
$#
Cari di halaman ini untuk mempelajari lebih lanjut: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
sumber
argc
dalam bahasa C-like,$#
akan terjadi0
jika tidak ada argumen yang diteruskan ke skrip,1
jika ada satu argumen, dll.sumber
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, dalamecho
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 Builtinshift
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."
sumber
Di bawah ini adalah yang mudah -
cat countvariable.sh
Output:
sumber
echo "$@" | awk '{print NF}'
nilai itu terkandung dalam variabel
$#
sumber
$#