20001126


昨日パチらせてもらった ハンドブックの hpif の例 の出だしは

    #
    #  Read first two characters of the file
    #
    read first_line
    first_two_chars=`expr "$first_line" : '\(..\)'`
    
    if [ "$first_two_chars" = "%!" ]; then
       以下略

こんな感じになっているのだが,運が悪いと(わざとやると) 変数 first_line にデカいファイルが丸々入ってくるような気がする. で,すぐそれを expr で評価している. やっぱりちょっと気持ち悪い. (shcat なんてのも見たことがあるが, あれは非常用でしょう.この例ではロジックをわかり易く するためにこんな書き方になっているのだと思うが)

    #
    #  Read first two characters of the file
    #
    first_two_chars=`/bin/dd ibs=1 count=2 2>/dev/null`
    
    if [ "$first_two_chars" = "%!" ]; then
       以下略

と書き直した.ちなみに標準入力からとっちゃう文字の範囲も変るので 以下略の部分では (echo -n "$first_two_chars" ; cat) | とかで辻褄を合せます.どうも shell 向きの仕事ではないような気も してきましたが...

そういえば最近は [ X"$first_two_chars" = X"%!" ] とかしなくても大丈夫?のようです.(FreeBSD の sh では)


http://www.st.rim.or.jp/~donogo/2000/11/26.html