Shell
- 的字母擴展順序
當我使用 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 甚至不支持多字節字元
dash
,mksh
例如yash
.