红联Linux门户
Linux帮助

使用echo发现的一个有意思的现象

发布时间:2006-05-16 00:52:58来源:红联作者:koov
作者:木名

当前目录下有三个文件分别命名为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
文章评论

共有 0 条评论