AIX Is not uniX ?

expr,edコマンド

シェルスクリプトで引数を正規表現でチェックする事になった。exprで良いだろうと思ったが、どうもLinuxと勝手が違うので調べた。

Expression1 の計算結果を Expression2 の計算結果から得られた正規表現パターンと比較します。正規表現の構文は ed コマンドの場合と同じ

という事で、AIXexpredコマンドの正規表現らしい。edで使える正規表現のところを何度見ても1個以上を表す+が無い((正確には\+エスケープする必要あり))。Linuxと違うわけだ。\{1,\}の表現は使えそうなので何とかなったが。

if  -z $1  || ! expr $1 : "[0-9a-zA-Z]\{1,\}$" >/dev/null
then
    エラー処理
fi

もちっとマシな方法は無いのか...。built-inコマンドで正規表現使えると良いだけどなぁ。素直にPerlを使えって事かもしれないが、後々のメンテナンス等を考えると嫌われるのよね*1

文字数

$ HOGE="あいうえお"
$ echo ${#HOGE}
5

ちょっwwwww。マルチバイトも一文字と数えてくれるwww。

$ typeset -R15 HOGE
$ echo "'${HOGE}'"
          あいうえお

ちょっwww。困るんですけどwww。仕様としては文字数だから正しいかもしれないけど、お願いだから10文字分として数えてください....。カラムをそろえる時ややこしいじゃないか。
因みにtypeset -R15 HOGEってのは変数HOGEを15文字分取って右寄せの意*2

いろいろと独特の動きをしてくれて面白いような悲しいような。PCにAIXエミュレータが欲しいわ。

*1:個人的にはシェルスクリプトPerlスクリプトもどっちもどっちだが...。お客さんの方にPerlを扱える(レビュー出来る)人が少ないってのが大きいところか。AIXの場合デフォルトのロケールsjisである事も大きいかな。

*2:bashにはないけど、kshにはある。どうでも良いがzshにもある