Kadang-kadang saya perlu membagi satu nomor dengan yang lain. Akan lebih bagus jika saya bisa mendefinisikan fungsi bash untuk ini. Sejauh ini, saya terpaksa menggunakan ekspresi seperti
echo 'scale=25;65320/670' | bc
tetapi akan lebih bagus jika saya bisa mendefinisikan fungsi .bashrc yang terlihat seperti
divide () {
bc -d $1 / $2
}
command-line
function
arithmetic
bashrc
bc
ixtmixilix
sumber
sumber
ksh
, varian 93, mendukung string di sini.Bash dapat melakukan matematika itu sendiri sampai batas tertentu. Namun, ini tidak berguna untuk keakuratan.
Tapi Anda benar - fungsi bash akan menjadi jalan pintas sederhana dan contoh Anda pada dasarnya berfungsi.
Lemparkan ke dalam .bashrc Anda dan kemudian Anda dapat:
sumber
echo $((10 / 5))
tidak perlu kutip.echo $((6383/7671))
akan memberi Anda nol. Anda harus eksplisit tentang nomor floating point:echo $((6383.0/7671.0))
Anda mungkin tahu bash builtin 'expr' seperti pada
yang terbatas pada bilangan bulat dan membutuhkan ruang di antara argumen.
Apa yang membuat Anda tidak mendefinisikan fungsi di sepanjang garis ekspresi gema yang sudah Anda gunakan? Yaitu
sumber
Tidak benar-benar jawaban untuk pertanyaan yang tepat ini, tetapi mungkin baik untuk diketahui. Gunakan
zsh
;-)sumber
expr
builtin, jawaban yang sangat bagus terlepas dari itu :)Jika Anda telah
calc
menginstal pada sistem Anda dan Anda tidak suka pembulatan, Anda dapat:sumber
apcalc
(Presisi Arbiter) ... Biner disebutcalc
calc
.Retasan kotor untuk nilai-nilai kecil dan presisi terbatas tanpa menggunakan bc akan, untuk melipatgandakan nominator sebelum pembagian, untuk mendapatkan hasil yang akurat.
Contoh tanpa presisi:
dan dengan presisi 2 digit: kalikan dengan 100 dan pindahkan titik desimal 2 langkah ke kiri:
Ini hanya berguna jika rentang angka diketahui sebelumnya, dan presisi selalu sama. Menghindari menelepon bc , dan menelepon sed sepertinya tidak masuk akal.
Perhatikan, bahwa mengalikan nilai mungkin menyebabkan kesalahan overflow, tetapi tidak terlalu awal:
sumber
$[expression]
sebagai gantinyaThe old format $[expression] is deprecated and will be removed in upcoming versions of bash.
Alih-alih menggunakan bc, Anda bisa menggunakan awk:
sumber
sumber