为什么bash对文本和数字条件表达式使用非直观运算符?

为什么bash对文本和数字条件表达式使用非直观运算符?,bash,operators,posix,language-design,Bash,Operators,Posix,Language Design,多年来一直困扰着我的一件事——为什么bash对文本和数字条件表达式使用非直观运算符?这背后是否有某种历史或技术原因,是由遵循的标准(如POSIX)强制执行,还是仅仅归结为语言作者的首选风格 例如,在bash中执行字符串比较时: [[ "X" == "X" ]] [[ "X" != "Y" ]] 我们使用似乎有逻辑或数学背景的运算符。但是,在比较数字时,我们使用非数学或逻辑运算符: [[ 2 -eq 2 ]] [[ 2 -lt 3 ]] 只是想澄清一下-我在这里寻找的答案是,为什么语言设计成这

多年来一直困扰着我的一件事——为什么bash对文本和数字条件表达式使用非直观运算符?这背后是否有某种历史或技术原因,是由遵循的标准(如POSIX)强制执行,还是仅仅归结为语言作者的首选风格

例如,在bash中执行字符串比较时:

[[ "X" == "X" ]]
[[ "X" != "Y" ]]
我们使用似乎有逻辑或数学背景的运算符。但是,在比较数字时,我们使用非数学或逻辑运算符:

[[ 2 -eq 2 ]]
[[ 2 -lt 3 ]]

只是想澄清一下-我在这里寻找的答案是,为什么语言设计成这种方式,我不是问在bash中比较是如何工作的(关于这一点已经有很多问题和答案)。

实际上在bash中,您可以使用
(…)
,并使用所有标准运算符,如:

((2==2))
((2<3))
((i>=5))
((2==2))
((2=5))

有关更多详细信息,请查看
manbash

中的算术评估,感谢您的回答-然而,我要问的问题是,为什么语言设计成这种方式,而不是查找有关比较如何工作的详细信息。我会更新这个问题,使之更清楚。这背后有历史原因。BASH脚本还需要与旧的POSIX
sh
向后兼容。