字符串比较是ASCII比较,所以
[ '>' \> '0' ]
应与
具有相同的结果[[ '>' > '0' ]]
但是为什么第一个返回true(0)而第二个返回false(1)?
答案 0 :(得分:5)
[[
使用当前区域设置进行字符串比较,[
没有。
如果您将LC_ALL
设置为C
,则[[
变体也将返回true:
pax$ LC_ALL=; if [[ ">" > "0" ]] ; then echo yes; fi
pax$ LC_ALL=C; if [[ ">" > "0" ]] ; then echo yes; fi
yes
根据图表here,我的默认区域设置en_US.UTF-8
在 >
之前排序 0
。将本地切换为C
(基于原始字节值的排序而不是特定于文化的排序)会改变行为。
如果您使用的是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=