Bagaimana cara menemukan jumlah argumen yang diteruskan ke skrip Bash?


182

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?


4
Kode itu hanya akan menyimpan string literal i+1dalam variabel ijika ada argumen.
Philipp

Jawaban:



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"

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.

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."


-1

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

3
Dapat ditulis sebagaiecho "$@" | awk '{print NF}'
user000001

-6

nilai itu terkandung dalam variabel $#


4
Terlepas dari kenyataan ada jawaban yang hampir sama (tapi benar) yang berumur 4 tahun, jawaban Anda salah - seharusnya$#
nachteil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.