シェルで簡易計算機

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

簡易計算機

環境

  • CentOS release 6.5 (Final)
  • bash 4.1.2

つうか ? を関数名に使えるの ?

関数定義して

? () { echo "$*" | bc -l; }

使う

? "1+2+3+4+5*10"
#=> 60

他にも色々

? が使えるのなら 他にも +-@_[]=!^#<>なども使えるのかなと試したら結構使える...恐るべし

+ () { echo "$*" | bc -l; }
- () { echo "$*" | bc -l; }
@ () { echo "$*" | bc -l; }
[ () { echo "$*" | bc -l; }
] () { echo "$*" | bc -l; }
_ () { echo "$*" | bc -l; }

for x in "@" "-" "+" "_" "[" "]"
do
  echo -n "${x}: "; eval $x "8*5"
done

# こんな結果で
#    @: 40
#    -: 40
#    +: 40
#    _: 40
#    [: 40
#    ]: 40

これとか [ 再定義できるのも恐ろしい。(/usr/bin/[)

$ which [
/usr/bin/[
$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 33408 Mar 12 20:12 /usr/bin/[

# "[" はコマンドなので普通のbashスクリプトが動かなくなっちゃう
$ [ -f /etc/hosts ] && echo "ok"
(standard_in) 1: syntax error
ok

無理なものは無理だよね

無理強いは良くないです。

$ ! () { echo "$*" | bc -l; }
-bash: syntax error near unexpected token `)'

$ ^ () { echo "$*" | bc -l; }
-bash: :s^ () { echo "$*" | bc -l; }: substitution failed

$ | () { echo "$*" | bc -l; }
-bash: syntax error near unexpected token `|'

$ % () { echo "$*" | bc -l; }
$ % "1+2+3"
-bash: fg: %: no such job

使い処によっては分かりやすいかも

$ is_linux? () { [ `uname` = "Linux" ] && true || false; }
$ is_linux? && echo ok
ok

参考

Commandlinefu
http://www.commandlinefu.com/commands/view/2520/define-a-quick-calculator-function