2010-01-20 (Wed) [長年日記]
_ シェルスクリプトの引数を一部加工して他のコマンドに渡す
シェルスクリプトの引数を一部だけ加工して他のコマンドに渡すには、どうすればいいだろう。
たとえば、UTF-8でパターンを受け取り、EUCのファイルをgrepで検索し、結果をUTF-8で出力するようなシェルスクリプトeucgrepを作りたいとする。
bashだったら配列を使って以下のように書けるようだ。
#!/bin/bash declare -a options while expr "$1" : "^-" > /dev/null ; do options=("${options[@]}" "$1") shift done pattern=`echo $1 | nkf -Wexm0` shift grep "${options[@]}" $pattern "$@" | nkf -Ewxm0
POSIXの範囲で同じことを実現できるだろうか。
_ Developers Summit 2010
今年は、「C++0x、Ruby、ECMAScript5 言語の国際標準化について」というパネルディスカッションに参加させていただくことになった。
技術的な話が中心になると思うので、興味がある方はどうぞ。
POSIXの範囲だと配列は一本しかないのできついですね。<br>語彙が"$@", set -- ..., shift [N], $1〜$9くらいしかない。<br><br>私がgrep(1)やfind(1)のラッパーを書いたときに考えたのは、メタ文字をエスケープしてコマンドラインを文字列として構成・保持し、最後にevalする方法でした。awk(1)の助けを借りています。<br><br>参考: http://svn.idaemons.org/repos/g/trunk/<br><br>localの使用以外はPOSIXの範囲ではないかと思っています。
なるほどー、evalですか。