長い間、sortプログラムのデフォルトの動作はASCII順序を使用していると考えていました。ただし、sort引数なしで次の行を入力すると:
#
@
私が得た:
@
#
しかし、ASCIIテーブルによると、#35と@64です。別の例は次のとおりです。
A
a
出力は次のとおりです。
a
A
誰もこれを説明できますか?ところで、使用する場合の「辞書順」とは何sort -dですか?
長い間、sortプログラムのデフォルトの動作はASCII順序を使用していると考えていました。ただし、sort引数なしで次の行を入力すると:
#
@
私が得た:
@
#
しかし、ASCIIテーブルによると、#35と@64です。別の例は次のとおりです。
A
a
出力は次のとおりです。
a
A
誰もこれを説明できますか?ところで、使用する場合の「辞書順」とは何sort -dですか?
回答:
POSIX以外のロケールを使用しているようです。
試してください:
export LC_ALL=C
その後sort。
info sort 明確に言う:
(1)非POSIXロケールを使用する場合(例えば、「LC_ALL」を「en_US」に設定することにより)、「sort」は、慣れているものとは異なる方法でソートされた出力を生成する場合があります。その場合、「LC_ALL」環境変数を「C」に設定します。「LC_COLLATE」のみの設定には2つの問題があることに注意してください。まず、「LC_ALL」も設定されている場合は効果がありません。第二に、「LC_CTYPE」(または「LC_CTYPE」が設定されていない場合は「LANG」)が互換性のない値に設定されている場合、動作は未定義です。たとえば、「LC_CTYPE」が「ja_JP.PCK」であるが「LC_COLLATE」が「en_US.UTF-8」の場合、未定義の動作になります。
ソート順を決定するには、各行に異なる文字を使用してファイルを作成し、ソートします。結果の出力は、ソート順を示します。
前述のman sortように、「辞書順」とは「空白と英数字のみを考慮する」という意味です。たとえば、与えられたデータ
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
装飾されていないsortコマンドが生成します
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(空白文字とで始まる行入れて!、#、$、%、および@記号を1つの
文字と数字で始まる行の先に、すなわち、英数字)が、sort -d生産
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogsスペースで始まるため、まだ最初ですが、特殊文字(句読点)は無視されます。
17前くる42、とfoxの間で来るbrownとjumps事実にもかかわらず、42そしてfox通常は前にそれらを移動する彼らの前の文字を持っています17。
____________ ASCII値の順に
1:space = 040、!= 041、#= 043、$= 044、%= 045、@= 0100。(スペースバーを無視して)これは、一部のキーボードではほぼ左から右の順序であることに注意してください。