字符串比较是ASCII比较,因此
[ '>' \> '0' ]
应该和以下结果相同
[[ '>' > '0' ]]
但是为什么第一个返回true(0),而第二个返回false(1)?
字符串比较是ASCII比较,因此
[ '>' \> '0' ]
应该和以下结果相同
[[ '>' > '0' ]]
[[
使用当前语言环境进行字符串比较,[
不会。
如果将 LC_ALL
设置为 C
,[[
变种也将返回 true:
pax$ LC_ALL=; if [[ ">" > "0" ]] ; then echo yes; fi
pax$ LC_ALL=C; if [[ ">" > "0" ]] ; then echo yes; fi
yes
en_US.UTF-8
,根据此处的图表,>
在0
之前排序。将本地设置更改为C
(基于原始字节值而不是特定于文化的排序),则行为会发生变化。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=