Bash – 测试一个字符串是否比另一个字符串“更大” – 它在内部如何工作?

前端之家收集整理的这篇文章主要介绍了Bash – 测试一个字符串是否比另一个字符串“更大” – 它在内部如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Bash中,我可以写下面的测试
[[ "f" > "a" ]]

这导致返回0,即true. bash如何实际执行此字符串比较?从我的理解>做一个整数比较.是否尝试比较操作数的ASCII值?

从帮助测试:
STRING1 > STRING2
                 True if STRING1 sorts after STRING2 lexicographically.

在内部,bash或者使用strcoll()或strcmp():

else if ((op[0] == '>' || op[0] == '<') && op[1] == '\0')
  {
    if (shell_compatibility_level > 40 && flags & TEST_LOCALE)
      return ((op[0] == '>') ? (strcoll (arg1,arg2) > 0) : (strcoll (arg1,arg2) < 0));
    else
      return ((op[0] == '>') ? (strcmp (arg1,arg2) > 0) : (strcmp (arg1,arg2) < 0));
  }

后者实际上比较了ASCII代码,前者(当启用区域设置时使用)执行更具体的比较,适合于在给定的区域设置中进行排序.

猜你在找的Bash相关文章