我不太理解http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html中'Rationale'部分的这段话。ISO POSIX-2:1993标准有一个-c选项,其行为类似于-C选项,但没有提供与POSIX.1-2008中指定的-c选项等效的功能。这意味着能够指定tr -cd\000-\177(将删除所有具有设置顶部位的字节)的历史实践将无效,因为在C语言环境中,值为八进制200至八进制377的字节不是字符。然而,我在CentOS 6.5系统上的测试似乎表明它确实有影响。
命令
$ export LC_ALL=C
$ export LANG=C
$ locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
$ printf "\x41\x42\x81\x82" | od -t x1
0000000 41 42 81 82
0000004
$ printf "\x41\x42\x81\x82" | tr -c -d "\000-\1777" | od -t x1
0000000 41 42
0000002
命令
tr -c -d "\000-\1777"
删除了值为\x81
和\x82
的字节。为什么我的测试结果与规范中的不一致?