' > ' 0' ]]"返回 false 而 "[ ' >'\> ' 0' ]"返回 true?-6ren"> ' > ' 0' ]]"返回 false 而 "[ ' >'\> ' 0' ]"返回 true?-字符串比较是ASCII比较,所以 [ '>' \> '0' ] 应该有相同的结果 [[ '>' > '0' ]] 但为什么第一个返回 true(0) 而第二个返回 false(1)? 最佳答案 [[ -6ren">
gpt4 book ai didi

string - 为什么 "[[ ' >' > ' 0' ]]"返回 false 而 "[ ' >'\> ' 0' ]"返回 true?

转载 作者:行者123 更新时间:2023-11-29 09:23:37 25 4
gpt4 key购买 nike

字符串比较是ASCII比较,所以

[ '>' \> '0' ]

应该有相同的结果

[[ '>' > '0' ]]

但为什么第一个返回 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

我的默认语言环境 en_US.UTF-8 根据图表 here .将本地语言切换到 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=

关于string - 为什么 "[[ ' >' > ' 0' ]]"返回 false 而 "[ ' >'\> ' 0' ]"返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29645037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com