Her*_*ert 3 string bash comparison
字符串比较是ASCII比较,所以
[ '>' \> '0' ]
Run Code Online (Sandbox Code Playgroud)
应该有相同的结果
[[ '>' > '0' ]]
Run Code Online (Sandbox Code Playgroud)
但是为什么第一个返回true(0)而第二个返回false(1)?
[[使用当前语言环境进行字符串比较,[但不是.
如果设置LC_ALL为C,[[变量也将返回true:
pax$ LC_ALL=; if [[ ">" > "0" ]] ; then echo yes; fi
pax$ LC_ALL=C; if [[ ">" > "0" ]] ; then echo yes; fi
yes
Run Code Online (Sandbox Code Playgroud)
根据此处的图表en_US.UTF-8,我的默认语言环境之前已经>排序了.将本地切换为(基于原始字节值的排序而不是特定于文化的排序)会更改行为. 0C
如果你在Linux上(这可能也适用于其他UNIX兄弟),该locale命令应该告诉你当前的设置是什么,如果你想调查/确认:
pax$ 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_ALL=
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |