Supposons que deux nombres soient stockés dans deux fichiers différents, a.txt
et b.txt
.
Chaque numéro est suffisamment grand (plus de 30 chiffres) pour ne pas être pris en charge par le type de données numérique utilisé par bash
.
Comment puis-je les ajouter dans le shell?
bash
shell
arithmetic
voldemort619
la source
la source
python
ou similaire dans ce cas.python
comme l'a suggéré phkRéponses:
En supposant qu'il s'agit de nombres décimaux, vous pouvez faire:
Attention, les sauts de
bc
ligne sont très longs (plus de 68 ou 69 chiffres selon l'implémentation). Avec GNUbc
, vous pouvez le désactiver en définissant laBC_LINE_LENGTH
variable d'environnement sur 0, comme avec:la source
L'astuce est de ne pas utiliser
bash
pour effectuer l'ajout 1 .Tout d'abord, lisez chaque nombre dans une variable distincte. Cela suppose que les fichiers ne contiennent qu'un numéro et aucune autre information.
Utilisez ensuite la
bc
calculatrice pour obtenir le résultat:bc
est un "langage arithmétique de précision arbitraire et une calculatrice".Pour stocker le résultat dans une variable
c
:Si la
<<<
syntaxe semble bizarre (elle est appelée "ici-chaîne" et est une extension de la syntaxe du shell POSIX prise en charge parbash
et quelques autres shells), vous pouvez plutôt utiliserprintf
pour envoyer l'addition àbc
:Et mémoriser à
c
nouveau le résultat :1 Utiliser
bash
pour effectuer l'addition de deux nombres extrêmement grands nécessiterait l'implémentation, dans lebash
script, d'une routine pour faire de l'arithmétique de précision arbitraire . C'est parfaitement faisable, mais lourd et inutile car chaque Unix est livré avecbc
qui vous fournit déjà ce service de manière relativement facile et accessible.la source
read a < a.txt
. Cela permettrait également de supprimer les blancs de début et de fin, le cas échéant (en supposant qu'ils n'aient$IFS
pas été modifiés).echo "\"hello\""
, la chose dans le$(...)
n'est pas une chaîne passée en argument à un autre programme, et le shell sait comment gérer l'imbrication des guillemets. C'est aussi pourquoi$(...)
il vaut mieux utiliser plutôt que les backticks; vous pouvez écrire$( ... $( ... ) )
sans aucune ambiguïté, alors que la même chose avec des backticks est ... maladroit.bc
.Comme Stéphane et Kusalananda l'ont dit , "vraiment, utilisez simplement bc", mais si vous voulez vraiment utiliser bash pour l'addition, voici un point de départ (entiers positifs uniquement) - je vais laisser comme exercice au lecteur de mettre en œuvre décimales et nombres négatifs:
J'ai laissé la
bc
comparaison là-dedans, mais j'ai commenté, pour comparaison.la source