Estou usando um terminal serial para fornecer entrada em nosso experimento de laboratório. Eu encontrei isso usando
$ echo "5X5"
apenas retorna uma string de "5X5"
. Existe um comando para executar uma operação de multiplicação?
fonte
Estou usando um terminal serial para fornecer entrada em nosso experimento de laboratório. Eu encontrei isso usando
$ echo "5X5"
apenas retorna uma string de "5X5"
. Existe um comando para executar uma operação de multiplicação?
Sim, você pode usar a Expansão Aritmética embutida do bash$(( ))
para fazer algumas contas simples
$ echo "$((5 * 5))"
25
Verifique a seção Shell Arithmetic no Bash Reference Manual para uma lista completa de operadores.
Para fins de integridade, como outro apontou, se você precisa de precisão arbitrária, bc
ou dc
seria melhor.
Para matemática mais avançada e precisa, considere usar bc (1).
echo "3 * 2.19" | bc -l
6.57
O Bash suporta a expansão aritmética com $(( expression ))
. Por exemplo:
$ echo $(( 5 * 5 ))
25
Vários utilitários fornecem aritmética, incluindo bc e expr .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
A solução clássica é:
expr 5 \* 5
Outra boa opção é:
echo 5 5\*p | dc
Ambas as soluções funcionarão apenas com operandos inteiros.
dc
funciona com flutuadores. Experimenteecho '4 k 50 7 / p' | dc
. A saída é7.1428
. Ok
comando define a precisão.k
. Eu certamente me lembro da precisão padrão sendo 0 (truncamento para inteiro). Estou me lembrando mal ou simplesmente porque as implementações mais recentes mudaram o comportamento?dc
raramente ao longo dos anos, já que sou mais algébrico e menos RPN, então não me lembro. Em um sistema GNU que estou usando, o padrão é 0. An (1993) FreeBSD velhaman
página menciona o padrão sendo zero, mas BSD mais velhasman
páginas não.echo '4 k 50.5 7 / p' | dc
funciona (saída:)7.2142
.Uma função shell simples (sem necessidade de sed) deve fazer o truque de interpretar '5X5'
fonte
Eu uso esta função que usa
bc
e, portanto, suporta cálculos de ponto flutuante:Exemplo:
A expansão aritmética do Bash não suporta floats (mas o shell Korn e zsh suportam).
Exemplo:
fonte
Tenho um script simples que uso para isso:
me@mycomputer:~$ cat /usr/local/bin/c
Ele muda
x
para*
uma vez que*
é um caractere especial no shell. Use-o da seguinte maneira:c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(ainda será necessário usar aspas se a expressão contiver parênteses).fonte
tr
pode ser usado para fazer mapeamento de caracteres para vários caracteres.Se você gosta de python e tem a opção de instalar um pacote, você pode usar este utilitário que fiz.
fonte