POSIX準拠のシェル(例:dash、bash、zsh ...)を使用するときは、常にアルファベット順に拡張されていることを確認できますか*
(で決定LC_COLLATE
)?
例:
$ echo 1 > file_a
$ echo 2 > file_b
$ echo 3 > file_c
$ cat *
1
2
3
答え1
この行動は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
一部のシェルは、マルチバイト文字(例:)をサポートしていないか、サポートしていますがdash
無効mksh
なバイトシーケンス(例:)をブロックしますyash
。
答え2
はい。正式な答えはここにあります。
パターンが既存のファイル名またはパス名と一致する場合、パターンはそのファイル名とパス名で置き換える必要があります。現在のロケールで有効な組み合わせ順序に基づいてソート。