[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:26980] Re: sub()/gsub() error in gawk-ja



At Fri, 16 Feb 2001 15:46:09 +0900,
MATSUDA Yoh-ichi / 松田陽一 wrote:

> 日常使用している gawk-ja なんですが、 sub() 及び gsub() の実装に
> 不具合と思われる挙動を発見しました。

gawk-ja は知りませんが、これは mawkとgawkでの
文字列定数の中での \ エスケープの仕様の違いっぽいですが。

 % echo | mawk '{print "\&";}'
 \&

# mawk(1)より
# Data types, conversion and comparison
#   If you escape any other character \c, you  get  \c,  i.e.,
#       mawk ignores the escape.

 % echo | gawk '{print "\&";}'
 &
 % echo | gawk '{print "\\\&";}'
 \&

# gawk(1)より
#  String Constants
#     \c   The literal character c.

で、awk では & はマッチした文字列とおきかわるので
 
> hoge:~/work$ echo ">"|mawk "{sub(/>/,\"\>\");print}"
> >
> hoge:~/work$ echo ">"|gawk "{sub(/>/,\"\>\");print}"
> >gt;

となります。
# gawk では escapeをはずされると />/を > で subすることになるので
# & はマッチした > になって 結果 >gt; になる。

以下のようにすると
 % echo ">"|gawk '{print "\\\&gt";}'
 >
となります。

ちなみに
 % echo ">"|mawk '{print "\046gt";}'
 % echo ">"|gawk '{print "\046gt";}'
でどちらも > になります。
 
> BTS に出すべきでしょうか?
> 
> # 出し方を知らないんですが…(汗)

 http://bugs.debian.org/ を見ましょう:)
# 例えば reportbug を使うとか。
-- 
鵜飼文敏