Angenommen, zwei Zahlen werden in zwei verschiedenen Dateien gespeichert, a.txt
und b.txt
.
Jede Zahl ist groß genug (mehr als 30 Stellen), um vom von verwendeten numerischen Datentyp nicht unterstützt zu werden bash
.
Wie kann ich sie in die Shell aufnehmen?
bash
shell
arithmetic
voldemort619
quelle
quelle
python
in diesem Fall verwenden oder ähnliches.python
wie vorgeschlagenAntworten:
Angenommen, es handelt sich um Dezimalzahlen, können Sie Folgendes tun:
Beachten Sie, dass
bc
Zeilenumbrüche sehr lange Zahlen enthalten (je nach Implementierung mehr als 68 oder 69 Stellen). Mit GNUbc
können Sie es deaktivieren, indem Sie dieBC_LINE_LENGTH
Umgebungsvariable auf 0 setzen, wie bei:quelle
Der Trick besteht darin , die Addition 1 nicht zu verwenden
bash
.Lesen Sie zunächst jede Zahl in eine separate Variable. Dies setzt voraus, dass die Dateien nur eine Nummer und keine anderen Informationen enthalten.
Verwenden Sie dann den
bc
Taschenrechner, um das Ergebnis zu erhalten:bc
ist eine "Arithmetiksprache und ein Taschenrechner mit beliebiger Genauigkeit".So speichern Sie das Ergebnis in einer Variablen
c
:Wenn sich die
<<<
Syntax seltsam anfühlt (sie wird als "Here-String" bezeichnet und ist eine Erweiterung der vonbash
und einigen anderen Shells unterstützten POSIX-Shell-Syntax ), können Sie stattdessenprintf
den Zusatz senden anbc
:Und das Ergebnis
c
erneut speichern :1 Um
bash
die Addition von zwei extrem großen Zahlen durchzuführen, müsste imbash
Skript eine Routine für die Arithmetik mit beliebiger Genauigkeit implementiert werden . Dies ist perfekt machbar, aber umständlich und unnötig, da jedes Unix mitgeliefert wird,bc
das Ihnen diesen Service bereits auf relativ einfache und leicht zugängliche Weise bietet.quelle
read a < a.txt
. Dies würde auch dafür sorgen, dass führende und nachfolgende Rohlinge entfernt werden, sofern vorhanden (vorausgesetzt,$IFS
sie wurden nicht geändert).echo "\"hello\""
ist das Ding in der$(...)
kein String, der als Argument an ein anderes Programm übergeben wird, und die Shell weiß, wie man mit der Verschachtelung von Anführungszeichen umgeht. Dies ist auch der Grund,$(...)
warum es besser ist, Backticks anstelle von Backticks zu verwenden. Sie können$( ... $( ... ) )
ohne Mehrdeutigkeit schreiben , während das Gleiche mit Backticks ... umständlich ist.bc
.Wie sowohl Stéphane als auch Kusalananda sagten : "Wirklich, benutze einfach bc", aber wenn du Bash wirklich als Addition verwenden willst , ist hier ein Ausgangspunkt (nur positive ganze Zahlen) - ich überlasse es dem Leser als Übung zu implementieren Dezimalstellen und negative Zahlen:
Ich habe den
bc
Vergleich dort belassen , aber zum Vergleich auskommentiert.quelle