バッシュマニュアルは言う:
で使用する場合[[、<及び>オペレーター現在のロケールを使用して辞書的に辞書を作成します。テストコマンドは、ASCII順序を使用してソートします。
これは、それぞれstrcoll(3)またはstrcmp(3)を使用することになります。
はこれをテストするには、次のプログラム(strcoll_strcmp.c)を使用します。
#include <stdio.h>
#include <string.h>
#include <locale.h>
int main(int argc, char **argv)
{
setlocale(LC_ALL, "");
if (argc != 3) {
fprintf(stderr, "Usage: %s str1 str2\n", argv[0]);
return 1;
}
printf("strcoll('%s', '%s'): %d\n",
argv[1], argv[2], strcoll(argv[1], argv[2]));
printf("strcmp('%s', '%s'): %d\n",
argv[1], argv[2], strcmp(argv[1], argv[2]));
return 0;
}
注違い:これらのような比較なぜ
$ LC_ALL=C ./strcoll_strcmp ' a' '0a'
strcoll(' a', '0a'): -16
strcmp(' a', '0a'): -16
$ LC_ALL=en_US.UTF-8 ./strcoll_strcmp ' a' '0a'
strcoll(' a', '0a'): 10
strcmp(' a', '0a'): -16
は、まさに私はよく分からないが。これは、英語の辞書編集ルールに基づいている必要があります。正確なルールは
ISO 14651 Method for comparing character strings and description of the common template tailorable orderingと付属のテンプレートテーブルに記載されていると思います。 Glibcにはこのデータがソースツリーの
libc/localedata/locales
に含まれています。
しかし、なぜ単一のスペースには、「」どちらの場合に比べて少ないのですか? – updogliu
@updogliu私の答えの一番下に追加を見てください。 – spbnick
私はいくつかのケースを試しました。先頭の空白は単に '' strcoll''で破棄されたようです。 – updogliu