Suponha que dois números sejam armazenados em dois arquivos diferentes, a.txt
e b.txt
.
Cada número é grande o suficiente (mais de 30 dígitos) para não ser suportado pelo tipo de dados numérico usado por bash
.
Como posso adicioná-los no shell?
bash
shell
arithmetic
voldemort619
fonte
fonte
python
ou similar nesse caso.python
como phk sugerido #Respostas:
Supondo que sejam números decimais, você pode:
Cuidado
bc
com os agrupamentos de linha de números muito longos (mais de 68 ou 69 dígitos, dependendo da implementação). Com o GNUbc
, você pode desativá-lo configurando aBC_LINE_LENGTH
variável de ambiente como 0, como em:fonte
O truque é não usar
bash
para executar a adição 1 .Primeiro, leia cada número em uma variável separada. Isso pressupõe que os arquivos contenham apenas um número e nenhuma outra informação.
Em seguida, use a
bc
calculadora para obter o resultado:bc
é uma "linguagem e calculadora aritmética de precisão arbitrária".Para armazenar o resultado em uma variável
c
:Se a
<<<
sintaxe parecer estranha (é chamada de "string aqui" e é uma extensão da sintaxe do shell POSIX suportada porbash
e mais algumas conchas), você pode usarprintf
para enviar a adição parabc
:E armazenando o resultado
c
novamente:1 Usar
bash
para realizar a adição de dois números extremamente grandes exigiria a implementação, nobash
script, de uma rotina para executar aritmética de precisão arbitrária . Isso é perfeitamente factível, mas complicado e desnecessário, pois todos os Unixbc
que já oferecem esse serviço já são fornecidos de maneira relativamente fácil e acessível.fonte
read a < a.txt
. Isso também resolveria eliminar espaços em branco à esquerda e à direita, se houver (assumindo$IFS
que não foram modificados).echo "\"hello\""
, a coisa dentro do$(...)
não é uma string passada como argumento para outro programa, e o shell sabe como lidar com o aninhamento de aspas. É também por isso que usar em$(...)
vez de reticulares é melhor; você pode escrever$( ... $( ... ) )
sem ambiguidade, enquanto a mesma coisa usando backticks é ... estranha.bc
.Como Stéphane e Kusalananda disseram , "realmente, basta usar bc", mas se você realmente deseja usar o bash para adição, aqui está um ponto de partida (apenas números inteiros positivos) - deixarei como um exercício para o leitor implementar decimais e números negativos:
Eu deixei a
bc
comparação lá, mas comentei, para comparação.fonte