Qual é a maneira mais fácil de calcular na linha de comando?

2

Existe uma maneira mais rápida de calcular na linha de comando o seguinte:

echo "4 * 5" | bc
    
por Texom512 30.07.2015 / 22:08

3 respostas

2

Eu gostaria de adicionar uma solução para o Z shell , infelizmente não sei quase nada sobre fish , para que eu possa adaptar isso para a sintaxe do fish. Desculpe!

Eu defino uma funcion c :

function c { echo $@ | bc }

E eu defino um alias para c , para que não ocorra a globalização de arquivos (e posso omitir as aspas em torno das expressões, incluindo especialmente uma estrela:

alias c="noglob c"

Então eu posso fazer cálculos como este:

$ c 4*5
20
$ c 1.5*2^8
384.0

São 3 toques no teclado (incluindo o% finalENTER) mais do que a expressão real a ser calculada. Pode ser melhorado ... talvez com atalhos de teclado.

    
por 01.08.2015 / 23:15
4

Shells compatíveis com POSIX ( dash ksh bash zsh e muito mais)

Existe um método integrado para isso. Use $(()) construction para fazer isso:

echo $((4 * 5))

Não chama nenhuma função, por isso é mais rápido.

Vamos comparar as formas ( zsh ):

$ time ( echo "4 * 5" | bc )
20
( echo "4 * 5" | bc; )  0.00s user 0.00s system 61% cpu 0.007 total

$ time ( echo $((4 * 5)) )
20
( echo $((4 * 5)); )  0.00s user 0.00s system 48% cpu 0.001 total

No entanto, $(()) tem muitas restrições e é capaz de fazer apenas operações aritméticas básicas.

C Shells ( csh tcsh )

Eu não acho que exista uma solução de expressão única em C Shell s. No entanto, é possível fazer o seguinte:

@ i = 4 * 5 ; printf "$i\n"

Fish

Provavelmente, math "4 * 5" funciona mais rápido.

    
por 30.07.2015 / 22:11
2

Uma resposta mais geral do que a melhor (neste caso) $(( )) resposta é usar <<<

por exemplo. bc <<< "4 * 5" Aqui não precisamos usar echo , apenas enviamos o argumento para stdin.

    
por 30.07.2015 / 22:21