Tr
了解 tr(1) 實用程序中“-C”和“-c”之間的區別
根據 tr(1) 手冊的
-C
意思是:Complement the set of characters in string1, that is ``-C ab'' includes every character except for `a' and `b'.
..並且
-c
意味著:Same as -C but complement the set of values in string1.
現在,如果我
-c
在上面的命令中使用,它會按我的預期工作:$ echo $(dd if=/dev/urandom count=1 2>/dev/null | tr -dc 'A-Za-z0-9') BAP0EctPYxpGgJmWYclqHj2eBWfZvVJs7nL6Y6YQiguGoZgziCceLe3TcyeV4uUi1R1yPW98s8LgiC8iNS1F60tEE2nXAHNi6L6IVS3CXBn94oPLGppxAgp $
..
-C
但沒有:$ echo $(dd if=/dev/urandom count=1 2>/dev/null | tr -dC 'A-Za-z0-9') ���hA����W���t�W��eu�C���W��o��A��xz�����M��p���x��2q����10O���������������p�R���t��I���c�8Z��Rq�9�L�Z��u����ot�n�T��n�nI��3i�yj�CuK��v�Ny�0�������i1�W�Lo�do�����TckL����i�rn��Wc��T���3����X��Z�M�e���I��J��I���A�5Y�����h���K���������ai������S����aZ�G���oab8��������4�g���G��g��0����I���H2�XGo���1�7���Ls�9H��7�b���Sf���E��Tv����mE�����3���l���S�88z��nl�p�f����w�E���Y�q�p���B� $
如何理解這個
set of characters
vsset of values
?
在 POSIX 語言環境中,字元可以取值 0 到 127。
tr -dc 'A-Za-z0-9'
將取值 0 到 255 的補碼。而
tr -dC 'A-Za-z0-9'
將取有效字元集中的補碼(因此值為 0 到 128)。
所以第一個是這樣的:
tr -d '\0-\57\72-\100\133-\140\173-\377'
而第二個就像:
tr -d '\0-\57\72-\100\133-\140\173-\177'