トップ «前の日記(2009-12-24 (Thu)) 最新 次の日記(2010-02-13 (Sat))» 編集   RSS 1.0 FEED  

Journal InTime


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 言語の国際標準化について」というパネルディスカッションに参加させていただくことになった。

技術的な話が中心になると思うので、興味がある方はどうぞ。

Tags: Ruby
本日のツッコミ(全2件) [ツッコミを入れる]
_ knu (2010-01-20 (Wed) 18:00)

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の範囲ではないかと思っています。

_ shugo (2010-01-20 (Wed) 18:02)

なるほどー、evalですか。