Bash字符串比较

Mar*_*rin 7 string bash comparison

我试图比较一个bash脚本中的两个字符串,我得到了非常奇怪的结果.

if [[ "010" < "01." ]]; then echo "Wrong"; else echo "OK"; fi
if [[ "010" < "01.0" ]]; then echo "Wrong"; else echo "OK"; fi
if [ "010" \< "01." ]; then echo "Wrong"; else echo "OK"; fi
if [ "010" \< "01.0" ]; then echo "Wrong"; else echo "OK"; fi
Run Code Online (Sandbox Code Playgroud)

阅读文档似乎[[ < ]]并且[ \< ]应该工作相同,但他们没有.[[ < ]]当字符串长度不同时,似乎工作错误.我错过了什么吗?

编辑:预期结果为4 x OK.测试:

  • CentOS版本6.4(最终版) - GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu)(OK Wrong OK OK)
  • Ubuntu 14.04.2 LTS - GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)(OK Wrong OK OK)
  • openSUSE 13.1(Bottle)(x86_64) - GNU bash,版本4.2.53(1)-release(x86_64-suse-linux-gnu)(OK OK OK OK)

Tim*_*sen 1

这是来自的文档help test

字符串 1 > 字符串 2

如果 STRING1 按字典顺序排序在 STRING2 之后,则为 True。

以你的第一条if语句为例:

if [[ "010" < "01." ]]; then echo "Wrong"; else echo "OK"; fi
Run Code Online (Sandbox Code Playgroud)

在 Bash 中,字符串"01."按字典顺序排序在字符串之前"010"(您可以在 Microsoft Excel 等其他工具中进行测试),因此比较返回 false。您的所有 4 次比较都是如此。

0请注意,在 的末尾添加附加项"01."不会改变与 的顺序"010",因此您仍然会得到相同的结果。

  • 你可能会说,我对发布这个答案感到有点“害羞”。那么如何解释OP呢? (3认同)