Консольный калькулятор в bash


_gaSh_ - Posted on 29 Январь 2010

давно уже пользуюсь, вдруг кому понадобится.

$ echo 'calc(){ awk "BEGIN{ print $* }" ;}' >> ~/.bashrc && reset

у меня в ~/.zshrc

# press F10 and calculate :)
arith-eval-echo() {
  LBUFFER="${LBUFFER}echo \$(( "
  RBUFFER=" ))$RBUFFER"
}
autoload -U arith-eval-echo
zle -N arith-eval-echo
bindkey "^[[21~" arith-eval-echo

потом в zsh жмем F10, появляется

$ echo $(( <курсор тут> ))

bc - не? :)

$ bc "(100+10)/11"
File (100+10)/11 is unavailable.
$ calc "(100+10)/11" #так-то явно кручее считать ;)
10

Хотя....

echo '1/3' | bc
0

но...

echo '1/3' | bc -l
.33333333333333333333

bc не принимает данные в качестве параметров. Надо делать так, например:

$ echo '(100+10)/11' | bc
10

(или в файл все формулы засунуть и скормить его bc)
Но ни кто не мешает сдалать функцию в ~/.bashrc, например:

bc() {
  echo "$*" | bc
}

И получим уже:

$ bc '(100+10)/11'
10

PS: Все же лучше брать в одиночные кавычки ('), чтобы shell не "навредил" ;)
PPS: Просто мне bc как-то роднее, чем awk, поэтому и сказал про него :)

Или так:
$ bc  <<<  '(100+10)/11'
10
Тут задействована конструкция “here string” присутствующая в bash 3.x, ksh93 и zsh. Тут нашел...

у меня в xchat встроено

$ calc ==  exec echo '&2' | bc -l
/calc 11111111111111111111111111111111111111111111111111*11111111111111111111111111111111111111111111111111
 12345679012345679012345679012345679012345679012345432098765432098765\
 4320987654320987654320987654321

кстати, в баше есть некоторые ограничения:

$ echo $((2**62)); echo $((2**63)) ;echo $((2**64))
4611686018427387904
-9223372036854775808
0

которых нету для bc =)

но если всеравно решились математику считать башем - рекомендую к прочтению: http://www.bash-hackers.org/wiki/doku.php/syntax/arith_expr

*сорри, не заметил, что анимоус. так же можно степени считать 3^4, например

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.