Dalam fungsi di bawah ini dengan 9 argumen:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Saya ingin membuat argumen kedua ke yang berikutnya (3..9) menjadi argumen opsional .
Ketika saya memanggil fungsi dengan 2 argumen, saya mendapatkan kesalahan:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Catatan BOLD : argumen pertama dan argumen kedua adalah argumen paksa dan bukan opsional untuk fungsi. Saya hanya ingin argumen kedua ke yang berikutnya adalah opsional dan ketika saya memanggil fungsi kurang dari 2 argumen fungsi harus mengembalikan hasil.
Lihatlah
shift
operatornya. Ini akan menggeser argumen 2 dan seterusnya ke posisi 1 dan seterusnya, membuang argumen 1.sumber
Anda bisa menggunakan definisi rekursif yang berakhir ketika
sum
dipanggil tanpa argumen. Kami menggunakan fakta yangtest
tanpa argumen dievaluasifalse
.sumber
Coba ini:
Ini akan menghasilkan 12 dan 30.
$@
merujuk ke parameter,$#
mengembalikan jumlah parameter, dalam hal ini 3 atau 11.Diuji di linux redhat 4
sumber
Anda bisa menggunakan loop kecil:
Secara pribadi, saya hanya menggunakan
perl
atauawk
sebagai gantinya:atau
sumber
Gunakan 0 sebagai nilai default untuk $ 1 hingga $ 9:
Dari
man bash
:Contoh:
Jumlahnya adalah 0
Jumlahnya adalah 3
Jumlahnya adalah 9
Output yang sama dengan awk:
sumber
Ini juga solusi saya sendiri, saya mencobanya dan menemukan:
Tapi jawaban @ muru bagus.
sumber