作者:木名
当前目录下有三个文件分别命名为a, b, c.
使用ls命令列出当前目录下的内容。如下:
yinjie@localhost ~
$ ls
a
c
d
使用echo时出现的奇怪现象,如下:
yinjie@localhost ~
$ echo [a-z]
a c d //正常
yinjie@localhost ~
$ echo [A-Z]
c d //异常,正常应该显示[A-Z]
为什么会这样呢?
先来看看当前使用的字符编码:
yinjie@localhost ~
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
原来默认使用的字符编码格式彩的是UTF-8,而不是我们所预期的ASCII字符集。
将UTF-8格式改成ASCII编码,修改方法如下:
yinjie@localhost ~
$ export LC_ALL=C
yinjie@localhost ~
$ locale
LANG=en_US.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
yinjie@localhost ~
$ export LANG=C
yinjie@localhost ~
$ locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
修改完毕,测试一下:
yinjie@localhost ~
$ echo [a-z]
a c d
yinjie@localhost ~
$ echo [A-Z]
[A-Z]
问题解决。
鸣谢: Ender.Dai