当我有文件a.txt
时,b.txt
和c.txt
保证
cat *.txt > all_files.txt
或
cat ?.txt > all_files.txt
会按字母顺序合并文件吗?
(在我的所有测试中,字母顺序都保留了下来,但我不确定,因为例如ls
订单未定义且不必是字母顺序 - 但它通常是,因为文件经常按字母顺序写入目录)
答案 0 :(得分:5)
不,这取决于区域设置。顺序由区域设置中的归类序列决定,可以使用LC_COLLATE
或LC_ALL
环境变量进行更改。请注意,bash在这方面与其他一些shell(例如Korn shell)的行为不同。
如果您的区域设置设置为C
或POSIX
,则它将按字符集顺序排列。否则你可能只会注意到混合大小写字母的差异,例如: en_ locales的序列是aAbBcC ... xXyYzZ。例如,请参阅http://collation-charts.org/fc6/fc6.en_GB.iso885915.html。
可以使用locale -a
列出可用的区域设置。
编辑:另一个变量LANG
可用,但现在通常不会使用它。根据单一UNIX规范,它使用:,没有LC_ALL和其他LC_ * ...环境变量。