Bash 手册第 6.4 节将 [[ string1 < string2 ]] 描述为
如果 string1 在当前语言环境中按字典顺序在 string2 之后排序,则为真。
我使用的是普通的英语 Linux,并希望我当前的语言环境是 ASCII,其中句点 [.] 在字典上小于 [0-9A-Za-z]。但是,看看这些:
$ echo $BASH_VERSION
4.3.11(1)-release
$ [[ "." < "1" ]] && echo "yes"
yes
$ [[ "A" < "B" ]] && echo "yes"
yes
$ [[ ".A" < "1B" ]] && echo "yes"
$
第 1 次和第 2 次比较与 ASCII 表一致,但为什么第 3 次是错误的?这个词典排序顺序到底是什么?
这是语言环境的输出:
$ locale
LANG=en_US.UTF-8
LANGUAGE=
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=