Yash 2 その 40: 数式展開
数式展開を実装した。
POSIX によると数式展開の内容はパラメータ展開などの他に引用符除去も行うことになっているが、ksh も bash も zsh も dash も引用符除去に対応していないように見える。Yash での実装の都合を考えると引用符除去はすることになっている方がよいのだが、他のどのシェルも対応していないというのはむしろ yash の方が間違っているのではないかとすら思えてくる。
そもそもシェルによって数式展開の実装に大きな差がある。Ksh や zsh は整数だけでなく浮動小数点数も計算できるようになっている一方、dash は数式の中で変数を使うことすらできない(※)。
Ksh や zsh では数式内の変数は、その変数の値が先に数式として評価され、その後元の数式で結果に置き換わる。よって a=b+1 b=2; echo $((a*3)) と入れると 9 と出る。Yash では今のところ変数の値を直接数字として解析しているので、この例のようなことはできない (が、将来対応したい)。
やはり整数演算だけでは不便だろうということで yash も浮動小数点数の演算に対応させた。浮動小数点数の %
演算子を実装するために fmod 関数を呼んでいて、それだけのために m ライブラリをリンクしなければならないのが何となくもったいない。
※ よって dash は POSIX に準拠していない。(バージョン 0.5.4 で確認)
| 固定リンク
コメント