【问题标题】:Bash : sort command do not treat dots [duplicate]Bash:排序命令不处理点[重复]
【发布时间】:2021-07-09 15:40:53
【问题描述】:

我有一个数组:

a=("toto.blabla" "toto.dlabla" "totodlabla")

然后我会这样做:

IFS=$'\n'; echo "${a[*]}" | sort -d; unset IFS

但结果是:

toto.blabla
totodlabla
toto.dlabla

而不是:

toto.blabla
toto.dlabla
totodlabla

为什么排序命令不处理点?

最好的问候,

奥利维尔

【问题讨论】:

  • “不处理点”是什么意思? . 的字符代码比字母低,因此排在它们前面。
  • -d 是“仅考虑空格和字母数字字符”的选项
  • 顺便说一句,你不应该unset IFS,你应该把它设置回正常的默认值。
  • 或者使用printf '%s\n' "${a[@]}"而不是触摸IFS
  • 好的,谢谢你的解释,有没有办法像我想要的那样排序?

标签: linux bash sorting


【解决方案1】:

排序时,您当前的语言环境会影响排序。如果您想要独立于语言环境的顺序,请使用 C 语言环境:

IFS=$'\n'; echo "${a[*]}" | LC_ALL=C sort -d; unset IFS

实际上,设置LC_COLLATE 就足够了。

【讨论】:

    【解决方案2】:

    谢谢你,它有效:-)

    使用 LC_ALL=C 但不使用 LC_COLLATE=C

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 2013-05-17
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 2013-12-23
      • 2019-09-30
      相关资源
      最近更新 更多