【发布时间】:2021-06-27 06:00:56
【问题描述】:
Bash manual section 6.4 将 [[ string1
如果 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=
【问题讨论】:
-
我的 OSX (high siera) 有 Bash 3.2.57。这个“问题”始于 Bash 4.1,它将 [[ strcoll 的解释似乎很到位。
标签: bash string-comparison lexicographic-ordering