Supongamos que dos números se almacenan en dos archivos diferentes, a.txty 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

pythono similar en ese caso.pythoncomo sugirió phkRespuestas:
Suponiendo que son números decimales, podría hacer:
Tenga en cuenta que la
bclí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_LENGTHvariable de entorno en 0, como con:fuente
El truco es no usar
bashpara 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
bccalculadora para obtener el resultado:bces 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 porbashy algunos otros shells), en su lugar puede usarprintfpara enviar la adición abc:Y almacenando el resultado
cnuevamente:1 El uso
bashpara realizar la suma de dos números extremadamente grandes requeriría la implementación, en elbashscript, 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 Unixbcque 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$IFSno 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
bccomparación allí, pero comenté, para comparar.fuente