Saya menggunakan terminal serial untuk memberikan masukan ke percobaan lab kami. Saya menemukan itu menggunakan
$ echo "5X5"
hanya mengembalikan string "5X5". Apakah ada perintah untuk menjalankan operasi perkalian?
Saya menggunakan terminal serial untuk memberikan masukan ke percobaan lab kami. Saya menemukan itu menggunakan
$ echo "5X5"
hanya mengembalikan string "5X5". Apakah ada perintah untuk menjalankan operasi perkalian?
Jawaban:
Ya, Anda dapat menggunakan Ekspansi Aritmatika bawaan bash$(( )) untuk melakukan beberapa matematika sederhana
$ echo "$((5 * 5))"
25
Periksa bagian Aritmatika Shell di Manual Referensi Bash untuk daftar lengkap operator.
Demi kelengkapan, seperti yang ditunjukkan orang lain, jika Anda membutuhkan ketelitian yang sewenang-wenang, bcatau dcakan lebih baik.
Bash mendukung ekspansi aritmatika dengan $(( expression )). Sebagai contoh:
$ echo $(( 5 * 5 ))
25
Sejumlah utilitas menyediakan aritmatika, termasuk bc dan expr .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Solusi klasiknya adalah:
expr 5 \* 5
Pilihan bagus lainnya adalah:
echo 5 5\*p | dc
Kedua solusi ini hanya akan bekerja dengan operan integer.
k. Saya pasti ingat presisi default menjadi 0 (pemotongan menjadi integer). Apakah saya salah mengingat, atau apakah penerapan yang lebih baru telah mengubah perilaku?
dcjarang menggunakan selama bertahun-tahun karena saya lebih aljabar dan kurang RPN jadi saya tidak ingat. Pada sistem GNU yang saya gunakan, defaultnya adalah 0. manHalaman FreeBSD lama (1993) menyebutkan defaultnya nol, tetapi manhalaman BSD yang lebih lama tidak.
echo '4 k 50.5 7 / p' | dcbekerja (output :) 7.2142.
Saya menggunakan fungsi ini yang menggunakan bcdan dengan demikian mendukung perhitungan floating point:
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
Contoh:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Ekspansi aritmatika Bash tidak mendukung pelampung (tapi Korn shell dan zsh mendukungnya).
Contoh:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
Saya memiliki skrip sederhana yang saya gunakan untuk ini:
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
Ini perubahan xuntuk *karena *merupakan karakter khusus di shell. Gunakan sebagai berikut:
c 5x5c 5-4.2 + 1c '(5 + 5) * 30' (Anda masih harus menggunakan tanda kutip jika ekspresi tersebut berisi tanda kurung).trdapat digunakan untuk melakukan pemetaan karakter untuk beberapa karakter.
Jika Anda suka python dan memiliki opsi untuk menginstal paket, Anda dapat menggunakan utilitas yang saya buat ini.
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dcbekerja dengan pelampung. Cobaecho '4 k 50 7 / p' | dc. Outputnya adalah7.1428. Thekperintah set presisi.