当从CRLF文件中读取*(星号)时,为什么echo命令不会列出目录内容?

时间:2018-05-28 09:57:59

标签: bash shell echo

有两个文件:

file1.txt - 在Linux上创建

root@localhost:~# file file1.txt
file1.txt: ASCII text
root@localhost:~# od -c file1.txt
0000000   *  \n

file2.txt - 在Windows上创建

root@localhost:~# file file2.txt
file1.txt: ASCII text, with CRLF line terminators
root@localhost:~# od -c file2.txt
0000000   *  \r  \n
root@localhost:~# ls
myFile1  myFile2  myFile3

root@localhost:~# echo `cat file1.txt`
myFile1  myFile2  myFile3
root@localhost:~# echo `cat file2.txt`
*

为什么第二个文件中的CR(回车)导致echo命令不列出目录内容但仅打印星号?

1 个答案:

答案 0 :(得分:2)

echo *.txt显示以.txt结尾的所有文件的方式相同,echo *$'\r'显示以回车结尾的所有文件。

由于你没有,它会逐字显示模式

如果您手动创建一些,或者意外地使用DOS行终止符运行脚本,它们将显示:

$ touch $'foo\r' $'bar\r'

$ echo *$'\r' | hexdump -C
00000000  62 61 72 0d 20 66 6f 6f  0d 0a                    |bar. foo..|
0000000a

(如果没有hexdump,回车将导致输出重复覆盖自身,使其看起来已损坏或只有一个文件匹配)