Supongamos que dos números se almacenan en dos archivos diferentes, a.txt
y b.txt
.
Cada número es lo suficientemente grande (más de 30 dígitos) para que no sea compatible con el tipo de datos numéricos utilizado por bash
.
¿Cómo puedo agregarlos en el shell?
bash
shell
arithmetic
voldemort619
fuente
fuente
python
o similar en ese caso.python
como sugirió phkRespuestas:
Suponiendo que son números decimales, podría hacer:
Tenga en cuenta que la
bc
línea ajusta números muy largos (más de 68 o 69 dígitos dependiendo de la implementación). Con GNUbc
, puede deshabilitarlo configurando laBC_LINE_LENGTH
variable de entorno en 0, como con:fuente
El truco es no usar
bash
para realizar la suma 1 .Primero, lea cada número en una variable separada. Esto supone que los archivos contienen solo un número y ninguna otra información.
Luego usa la
bc
calculadora para obtener el resultado:bc
es un "lenguaje y calculadora aritmética de precisión arbitraria".Para almacenar el resultado en una variable
c
:Si la
<<<
sintaxis se siente rara (se llama "here-string" y es una extensión de la sintaxis de shell POSIX soportada porbash
y algunos otros shells), en su lugar puede usarprintf
para enviar la adición abc
:Y almacenando el resultado
c
nuevamente:1 El uso
bash
para realizar la suma de dos números extremadamente grandes requeriría la implementación, en elbash
script, de una rutina para hacer aritmética de precisión arbitraria . Esto es perfectamente factible, pero engorroso e innecesario, ya que viene con todos los Unixbc
que ya le brindan este servicio de una manera relativamente fácil y accesible.fuente
read a < a.txt
. Eso también se encargaría de eliminar los espacios en blanco iniciales y finales si los hubiera (suponiendo que$IFS
no se hayan modificado).echo "\"hello\""
, lo que hay dentro$(...)
no es una cadena que se pasa como argumento a otro programa, y el shell sabe cómo lidiar con el anidamiento de comillas. Esta es también la razón por la cual$(...)
es mejor usar en lugar de retroceder puedes escribir$( ... $( ... ) )
sin ninguna ambigüedad, mientras que lo mismo usando backticks es ... incómodo.bc
.Como dijeron Stéphane y Kusalananda , "realmente, solo usa bc", pero si realmente quieres usar bash para agregar, aquí hay un punto de partida (solo enteros positivos): lo dejaré como un ejercicio para que el lector lo implemente decimales y números negativos:
Dejé la
bc
comparación allí, pero comenté, para comparar.fuente