用utf8编码执行一个bash脚本的问题

我有一个用utf8编码的bash脚本。

在脚本中,我使用sed命令使用§作为分隔符。

现在当我运行执行此脚本sed抱怨分隔符。

如果我使用正常字符作为ex @的分隔符,那么一切正常。

我已经在腻子中看到脚本[在putty中设置utf8],字符显示正常。

另外从locale命令显示的Linux默认字符集显示

  LC_CSET=en_US.UTF-8 

可能出了什么问题?

早些时候,我曾经有shell脚本windows-1252编码,这用于工作。

可能您的sed版本不支持多字节分隔符。 如果你看§在两个字符集中编码的方式,你会看到不同之处:

 % locale LANG="en_CA.UTF-8" LC_COLLATE="en_CA.UTF-8" LC_CTYPE="en_CA.UTF-8" LC_MESSAGES="en_CA.UTF-8" LC_MONETARY="en_CA.UTF-8" LC_NUMERIC="en_CA.UTF-8" LC_TIME="en_CA.UTF-8" LC_ALL= % printf § > section.utf8 % hexdump -C section.utf8 00000000 c2 a7 |..| 00000002 % iconv -f UTF-8 -t WINDOWS-1252 < section.utf8 > section.win1252 % hexdump -C section.win1252 00000000 a7 |.| 00000001 

各种版本的sed会给你或多或less有用的消息。 在我的OS X 10.6系统上,我有点神秘:

 % sed 's§foo§bar§' sed: 1: "s§foo§bar§": RE error: illegal byte sequence 

Ubuntu 10.04 LTS使用的sed版本更有帮助:

 % sed 's§foo§bar§' sed: -e expression #1, char 2: delimiter character is not a single-byte character