Jos*_* M. 20 linux unix bash command-line
$ ls |sort
xyz-0.0.1-1554490900.rpm
xyz-0.0.1-1554745305.rpm
xyz-0.0.1-1554751021.rpm
xyz-0.0.1-1555513460.rpm
xyz-0.0.1-1555951745.rpm
xyz-0.0.1-1554323568.rpm
$ /bin/ls |sort
xyz-0.0.1-1554323568.rpm
xyz-0.0.1-1554490900.rpm
xyz-0.0.1-1554745305.rpm
xyz-0.0.1-1554751021.rpm
xyz-0.0.1-1555513460.rpm
xyz-0.0.1-1555951745.rpm
$ which ls
alias ls='/bin/ls --color'
/bin/ls
Run Code Online (Sandbox Code Playgroud)
请注意,这两个命令之间的排序不同(ls |sort导致排序不正确)。这一定是由于颜色标志,但为什么呢?
Fre*_*ddy 25
在排序后的彩色输出中ls|sort,我们可以看到最后一行xyz-0.0.1-1554323568.rpm是非彩色输出的第一行。其他行同样排序。
如果我们查看彩色转义码(未排序),我们可以看到第一行以不同的转义码开头^[[0m。这会在排序时导致错误的顺序(^[[01before ^[[0m)。
$ /bin/ls --color xyz* | cat -A
^[[0m^[[01;31mxyz-0.0.1-1554323568.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554490900.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554745305.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554751021.rpm^[[0m$
^[[01;31mxyz-0.0.1-1555513460.rpm^[[0m$
^[[01;31mxyz-0.0.1-1555951745.rpm^[[0m$
Run Code Online (Sandbox Code Playgroud)
小智 24
做:
/bin/ls --color > file1
/bin/ls > file2
Run Code Online (Sandbox Code Playgroud)
并比较内容,您会看到不同之处。
混叠ls到/bin/ls --color=auto可能是更好的主意,它会停止ls使用颜色代码时没有直接写入终端(管道到下一个程序时或写入文件等)。