Misalkan dua angka disimpan dalam dua file berbeda, a.txt
dan b.txt
.
Setiap angka cukup besar (lebih dari 30 digit) untuk tidak didukung oleh tipe data numerik yang digunakan oleh bash
.
Bagaimana saya menambahkannya di shell?
bash
shell
arithmetic
voldemort619
sumber
sumber
python
atau serupa dalam hal itu.python
seperti yang disarankan phkJawaban:
Anggap itu angka desimal, Anda bisa melakukan:
Waspadalah bahwa
bc
garis-membungkus angka yang sangat panjang (lebih dari 68 atau 69 digit tergantung pada implementasinya). Dengan GNUbc
, Anda dapat menonaktifkannya dengan mengaturBC_LINE_LENGTH
variabel lingkungan ke 0, seperti dengan:sumber
Caranya adalah dengan tidak menggunakan
bash
untuk melakukan penambahan 1 .Pertama, baca setiap angka menjadi variabel yang terpisah. Ini mengasumsikan bahwa file hanya berisi angka dan tidak ada informasi lain.
Kemudian gunakan
bc
kalkulator untuk mendapatkan hasilnya:bc
adalah "bahasa aritmatika dan kalkulator presisi arbitrer".Untuk menyimpan hasilnya dalam variabel
c
:Jika
<<<
sintaksnya terasa aneh (ini disebut "di sini-string" dan merupakan ekstensi ke sintaks shell POSIX yang didukung olehbash
dan beberapa shell lain), Anda dapat menggunakanprintf
untuk mengirim tambahan kebc
:Dan menyimpan hasilnya
c
lagi:1 Menggunakan
bash
untuk melakukan penambahan dua angka yang sangat besar akan membutuhkan implementasi, dalambash
skrip, dari rutinitas untuk melakukan aritmatika presisi arbitrer . Ini sangat bisa dilakukan, tetapi rumit dan tidak perlu karena setiap Unix datangbc
yang sudah menyediakan layanan ini kepada Anda dengan cara yang relatif mudah dan dapat diakses.sumber
read a < a.txt
. Itu juga akan menangani pengosongan awal dan akhir kosong jika ada (dengan asumsi$IFS
belum dimodifikasi).echo "\"hello\""
, hal yang ada di dalamnya$(...)
bukan string yang diteruskan sebagai argumen ke program lain, dan shell tahu bagaimana menghadapi penawaran yang bersarang. Ini juga mengapa menggunakan$(...)
daripada backticks lebih baik; Anda dapat menulis$( ... $( ... ) )
tanpa ambiguitas apa pun, sedangkan hal yang sama menggunakan backticks adalah ... canggung.bc
.Seperti kata Stéphane dan Kusalananda , "sungguh, gunakan saja bc", tetapi jika Anda benar-benar ingin menggunakan bash sebagai tambahan, inilah titik awal (hanya bilangan bulat positif) - Saya akan meninggalkannya sebagai latihan bagi pembaca untuk menerapkan angka desimal dan negatif:
Saya telah meninggalkan
bc
perbandingan di sana, tetapi berkomentar, untuk perbandingan.sumber