Bash shell:通配符保证字母顺序吗?

Bash shell:通配符保证字母顺序吗?,bash,dash-shell,Bash,Dash Shell,当我有文件a.txt,b.txt和c.txt时,是否保证 cat *.txt > all_files.txt 或 将按字母顺序组合文件吗 (在我所有的测试中,字母顺序都被保留了下来,但我不确定,因为例如对于ls来说,顺序是未定义的,不需要按字母顺序-但通常是这样,因为文件经常按字母顺序写入目录)否,这取决于语言环境。顺序由区域设置中的排序顺序决定,可以使用LC\u-COLLATE或LC\u-ALL环境变量更改排序顺序。请注意,bash在这方面的行为与其他一些shell(例如kornshe

当我有文件
a.txt
b.txt
c.txt
时,是否保证

cat *.txt > all_files.txt

将按字母顺序组合文件吗

(在我所有的测试中,字母顺序都被保留了下来,但我不确定,因为例如对于
ls
来说,顺序是未定义的,不需要按字母顺序-但通常是这样,因为文件经常按字母顺序写入目录)

否,这取决于语言环境。顺序由区域设置中的排序顺序决定,可以使用
LC\u-COLLATE
LC\u-ALL
环境变量更改排序顺序。请注意,bash在这方面的行为与其他一些shell(例如kornshell)不同

如果您的语言环境设置为
C
POSIX
,则它将按字符集顺序排列。否则,您可能只会注意到大小写混合字母的区别,例如,en_uu地区的顺序是aAbBcC。。。xxyyz。例如,请参见

可用的区域设置可以使用
locale-a
列出


编辑:另一个变量
LANG
可用,但现在通常不太使用。根据单一UNIX规范,它被使用:在没有LC_ALL和其他LC_*。。。环境变量

或多或少的来自serverfault的重复:(简短的回答是“是”),我认为如果它在另一个stack exchange站点上,它不可能是重复的。当我提出这个问题时,我在列表中没有看到任何重复项(因为它当然只显示下面堆栈中的条目),而且它显然是关于编程的主题。不要误会,这里只有你问题的答案:)“路径名按LC_COLLATE类别的当前设置定义的排序顺序排列,请参阅XBD规范LC_COLLATE”。外壳扩展按字母顺序排列;
ls
可以按时间顺序或字母顺序、向上或向下排序,具体取决于选项。
cat ?.txt > all_files.txt