我正在尝试比较bash脚本中的两个字符串,我的结果非常奇怪。
[[ < ]]
阅读文档似乎[ \< ]
和[[ < ]]
应该是一样的,但他们不会这样做。当字符串不具有相同的长度时,似乎OK
工作错误。我错过了什么吗?
编辑:
预期结果是4 x OK Wrong OK OK
。经过测试:
OK Wrong OK OK
)OK OK OK OK
)答案 0 :(得分:1)
以下是help test
的文档:
STRING1&gt; STRING2
如果STRING1按字典顺序在STRING2之后排序,则为真。
以您的第一个if
语句为例:
if [[ "010" < "01." ]]; then echo "Wrong"; else echo "OK"; fi
在Bash中,字符串"01."
按字典顺序排序字符串"010"
(您可以在Microsoft Excel等其他工具中测试),因此比较返回false。所有4个比较都是这种情况。
请注意,在0
的末尾添加额外的"01."
不会更改与"010"
的排序,因此您仍会获得相同的结果。
答案 1 :(得分:0)
原因可能是从bash 4.1开始&lt;和&gt;字符串比较运算符尊重语言环境。
因此,在两个系统之间,您可以有以下不同之处:
locale
进行检查(有关不同区域设置的含义,请参阅https://unix.stackexchange.com/a/87763/122478)shopt
进一步阅读:
答案 2 :(得分:-1)
如果你要比较整数,你应该这样做:
如果[[10] 1]];然后回声“10&lt; 1”;否则回声“10&gt; 1”; fi 10> 1
如果你想比较浮点数,你应该看一下这个帖子: How to do float comparison in Bash?
对于你的例子:
echo“10&lt; 1.0”| bc 返回:0
echo“10&gt; 1.0”| bc retunr:1