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

Inv*_*r53 4 bash utf-8 sed shell-scripting

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

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

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

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

我已经在 putty[set utf8 in putty] 中查看了脚本,并且字符看起来很好。

还有来自locale命令的Linux 默认字符集显示

 LC_CSET=en_US.UTF-8 
Run Code Online (Sandbox Code Playgroud)

可能出了什么问题?

早些时候,我曾经对 shell 脚本使用 windows-1252 编码,这曾经有效。

fis*_*ion 7

可能您的版本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
Run Code Online (Sandbox Code Playgroud)

的各种版本sed会给你或多或少有用的信息。在我的 OS X 10.6 系统上,我得到了一些神秘的信息:

% sed 's§foo§bar§' 
sed: 1: "s§foo§bar§": RE error: illegal byte sequence
Run Code Online (Sandbox Code Playgroud)

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

% sed 's§foo§bar§'
sed: -e expression #1, char 2: delimiter character is not a single-byte character
Run Code Online (Sandbox Code Playgroud)