Saya ingin menghitung ekspresi dalam shell. Saya menggunakan kode berikut:
pi=$(echo "scale=10; 4*a(1)" | bc -l)
i=3
d=`expr (1+c($pi*($i/10)+$pi))/2 | bc -l`
Tapi katanya
bad pattern: (1+c(3.1415926532*(3/10)+3.1415926532))/2
Mengapa?
shell
shell-script
bc
math
yuxuan
sumber
sumber
Waspadalah bahwa di mana Anda mengatur skala memiliki pengaruh pada perhitungan.
Skrip ini:
output:
sumber
Jika Anda mengikuti saran saya, Anda tidak akan menggunakan `` atau
$()
- ini sedikit konyol.bc
adalah interpreter interaktif yang berorientasi garis. Bunyinya dalam baris dari stdin, memeriksa apakah perlu yang lain berdasarkan input yang baru saja dibaca, dan kemudian mencetak hasilnya ke stdout atau meminta lebih banyak pada stdin. Seperti shell Anda, itu bahkan akan menolak untuk melakukan apa pun lebih dari output line-buffer bahkan ketika ditulis ke selain terminal. Tidak perlu sama sekali untuk memanggil yang barubc
untuk setiap perhitungan - terutama dalam substitusi perintah yang juga melibatkan memanggil shell baru dan mengalokasikan pipa baru.Cara terbaik adalah mengatur proses bersama.
Dan
bc
itu hanya akan terus berjalan - semua nilai variabel yang Anda lakukan begitu banyak pekerjaan untuk bolak-balik di antara sesaat,bc
proses yang diganti perintah bisa lebih mudah disimpan secara terpusat di pusatbc
.Dan bahkan lebih baik, karena saya belajar bagaimana melakukan ini beberapa hari yang lalu, Anda dapat menempatkan
bc
proses pada server soket.Dan dengan shell yang berbicara
/dev/tcp
bahasa:Itu bisa menjadi sedikit rumit. Saya menulis sebuah fungsi kecil yang dipanggil
bchat()
untuk membuatnya lebih mudah.Setelah menyiapkan server soket seperti yang ditunjukkan di atas, Anda mungkin menggunakan fungsi itu seperti:
... dan lagi, keadaan itu akan bertahan selama proses bc tidak ...
sumber