此代码:
text() {
cat <<'EOF'
f='.git_cache_meta';
f='adir/bdir/cdir/';
f='adir/';
f='he'\'''\'''\'''\'''\''s good.txt';
f='-test';
f='subdir/';
f='一份文件.txt';
f='subdir/.secret';
f='my file.txt';
f='adir/bdir/cdir/keep.txt';
f='adir/bdir/';
EOF
}
text | sort
输出:
f='adir/';
f='adir/bdir/';
f='adir/bdir/cdir/';
f='adir/bdir/cdir/keep.txt';
f='.git_cache_meta';
f='he'\'''\'''\'''\'''\''s good.txt';
f='my file.txt';
f='subdir/';
f='subdir/.secret';
f='-test';
f='一份文件.txt';
这段代码:
text() {
cat <<'EOF'
f='.git_cache_meta'; something
f='adir/bdir/cdir/'; something
f='adir/'; something
f='he'\'''\'''\'''\'''\''s good.txt'; something
f='-test'; something
f='subdir/'; something
f='一份文件.txt'; something
f='subdir/.secret'; something
f='my file.txt'; something
f='adir/bdir/cdir/keep.txt'; something
f='adir/bdir/'; something
EOF
}
text | sort
输出:
f='adir/bdir/cdir/keep.txt'; something
f='adir/bdir/cdir/'; something
f='adir/bdir/'; something
f='adir/'; something
f='.git_cache_meta'; something
f='he'\'''\'''\'''\'''\''s good.txt'; something
f='my file.txt'; something
f='subdir/.secret'; something
f='subdir/'; something
f='-test'; something
f='一份文件.txt'; something
我对上述代码的期望是按ASCII码排序,即:
f='-test';
f='.git_cache_meta';
f='adir/';
f='adir/bdir/';
f='adir/bdir/cdir/';
f='adir/bdir/cdir/keep.txt';
f='he'\'''\'''\'''\'''\''s good.txt';
f='my file.txt';
f='subdir/';
f='subdir/.secret';
f='一份文件.txt';
和此:
f='-test'; something
f='.git_cache_meta'; something
f='adir/'; something
f='adir/bdir/'; something
f='adir/bdir/cdir/'; something
f='adir/bdir/cdir/keep.txt'; something
f='he'\'''\'''\'''\'''\''s good.txt'; something
f='my file.txt'; something
f='subdir/'; something
f='subdir/.secret'; something
f='一份文件.txt'; something
respectly。
两个测试结果显示排序不遵循ASCII码,并且向尾部添加相同的值(test2)会产生非常不同的结果(在测试1中f='adir/';
在{{1}之前},而在测试2 f='adir/bdir/cdir/';
之后是f='adir/'; something
)。
我想知道f='adir/bdir/cdir/'; something
使用的实际算法是什么。我应该如何编码以产生预期的结果?
答案 0 :(得分:1)
它使用$LC_COLLATE
中指定的归类顺序。有关详细信息,请参阅locale(7)
手册页。
text | LC_COLLATE=C sort