Linux各ディストリビューションにおけるlocale設定によるソートの挙動の違い

はじめに

localeの設定の違いにより意図せず sort コマンドの結果が変わってしまうことがあったのでちょっと調べてみた

検証方法

dockerでbash動かして検証

以下でソートするファイルを作成

echo {a..z} {A..Z} - _ . , | tr ' ' '\n' | tee txt

各ディストリビューションの結果

Amazon Linux

bash-4.2# LANG=C sort txt | tr '\n' ' '; echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
bash-4.2# LANG=en_US.UTF-8 sort txt | tr '\n' ' '; echo
_ - , . a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z

Amazon Linux 2

イメージ: amazonlinux:2

bash-4.2# LANG=C sort txt | tr '\n' ' '; echo
, - .  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
bash-4.2# LANG=en_US.UTF-8 sort txt | tr '\n' ' '; echo
_ - , .  a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z

Debian 11

イメージ: debian:11.6

root@9ca7376f8fd2:/# LANG=C sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
root@9ca7376f8fd2:/# LANG=en_US.UTF-8 sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z

Ubuntu 22.04

イメージ: ubuntu:22.04

root@4e7c1581c1cb:/# LANG=C sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
root@4e7c1581c1cb:/# LANG=en_US.UTF-8 sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z

CentOS 7

イメージ: centos:7

[root@4b1ca5267b59 /]# LANG=C sort txt | tr '\n' ' '; echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@4b1ca5267b59 /]# LANG=en_US.UTF-8 sort txt | tr '\n' ' '; echo
_ - , . a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z

CentOS 8

イメージ: centos:8

[root@b23a0861c781 /]# LANG=en_US.UTF-8 sort txt | tr '\n' ' '; echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@b23a0861c781 /]# LANG=C sort txt | tr '\n' ' '; echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z

Alpine

イメージ: alpine:3.17

d0ba3c597df1:/# LC_ALL=en_US.UTF-8 sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
d0ba3c597df1:/# LC_ALL=C sort txt | tr '\n' ' ';echo
, - . A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z

まとめ

  • AmazonLinux, CentOS7で、Cとen_US.UTF-8でソート順が変わった
  • 結構雑な検証なのでそもそもの何かが間違ってるかも

参考