Shell

  • 的字母擴展順序

  • November 19, 2015

當我使用 POSIX 兼容的 shell(es:dash、bash、zsh、…)時,我可以確定它*總是按字母順序擴展(由 指示LC_COLLATE)嗎?

例子:

$ echo 1 > file_a
$ echo 2 > file_b
$ echo 3 > file_c
$ cat *
1
2
3

POSIX 需要這種行為,您可以放心地依賴它。

另請注意,您希望將語言環境設置C為獲得一致的行為。在排序規則元素具有相同排序順序的語言環境中,您會得到奇怪的結果

在具有 UTF-8 語言環境的 GNU 系統上:

$ printf '%b\n' '\U2461' '\U2460' | sort
②
①

或者:

$ printf '%s\n' A B a b | sort
a
A
b
B

設置為C語言環境:

$ printf '%b\n' '\U2461' '\U2460' | LC_ALL=C sort
①
②

$ printf '%s\n' A B a b | LC_ALL=C sort
A
B
a
b

有些 shell 甚至不支持多字節字元dashmksh例如yash.

引用自:https://unix.stackexchange.com/questions/243785