如何让bash/zsh的glob匹配区分大小写并按ASCII序排序?
问题:Glob匹配结果无法按ASCII字典序区分大小写排序
环境信息
$ /usr/bin/zsh --version zsh 5.5.1 (x86_64-redhat-linux-gnu) $ bash --version GNU bash, version 4.4.20(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
需求
glob匹配结果需按**ASCII字典序(区分大小写)**排序:数字在前,大写字母(A-Z)次之,小写字母(a-z)最后;同前缀文件按数字顺序排列(如A.0应排在A.1之前)。
当前行为
zsh与bash表现一致,执行echo *得到的结果不符合预期:
$ echo * 9.0 9.1 a.0 A.0 a.1 A.1
按照要求,A.0应在a.0之前,A.1应紧跟A.0且在a.1之前,但当前排序结果不满足该规则。
已尝试但无效的操作
- 临时设置
LC_COLLATE=C后执行glob匹配:$ (LC_COLLATE=C; echo *) 9.0 9.1 a.0 A.0 a.1 A.1 - zsh专用排序参数尝试:
# 数字排序参数(on) $ (LC_COLLATE=C; echo *(on)) 9.0 9.1 a.0 A.0 a.1 A.1 # 普通排序参数(:o) $ (LC_COLLATE=C; echo *(:o)) 9.0 9.1 a.0 A.0 a.1 A.1
内容的提问来源于stack exchange,提问作者Mingfei Gao
相关产品推荐
相关产品推荐

