exprコマンドの意外性
exprコマンドは意外に馬鹿にならない。正規表現マッチや文字列の長さなども取れる。
http://ja.doukaku.org/6/に必要なのは数字と非数字の切り分け、整数の乗除算、条件分岐、繰り返し、表示のみ。
というわけでbashで無理矢理書いてみた。
function do-digits () { digit=`expr "$1" : '\([0-9]\+\)'` if [ "$digit" != "" ];then echo -n `expr $digit '*' 21 / 20` rest=`expr "$1" : '[0-9]\+\(.\+\)'` else rest="$1" fi } function do-nondigits () { if [ "$1" != "" ]; then nondigitlen=`expr "$1" : '[^0-9]\+'` len=`expr length "$1"` echo -n `expr "$1" : '\([^0-9]\+\)'` if [ $nondigitlen != $len ]; then rest=`expr "$1" : '[^0-9]\+\(.\+\)'` else rest="" fi fi } function with-tax () { rest=$1 while [ "$rest" != "" ]; do do-digits "$rest" do-nondigits "$rest" done echo } with-tax "ダイコン150円、ハクサイ120円、ジャガイモ30円" # =>"ダイコン157円、ハクサイ126円、ジャガイモ31円"