所以我正在做我的工作,我需要在文件夹中列出一些特定的文件。
我打字了
ls -lrt *ABCD*201604*
它又归来了
*ABCD*201604* not found
。
然后看看这些文件是否真的存在,我做ls -lrt
并发现有这样的文件。
接下来,我在输入命令ABCD
时从列出的文件中复制了201604
和ls -lrt *ABCD*201604*
,这很有用!
我比较了我的两个命令,看看我是否犯了任何错误,但发现两者完全相同。对此类行为有何解释?
我写的一篇:
$ ls -lrt *RFPTDW*20160425*
*RFPTDW*20160425* not found
我复制的一个:
$ ls -lrt *RFPTDW*20160425*
RFPTDW107_01_01_20160425_1526.txt
RFPTDW059_01_01_20160425_1527.txt
在第二个输出中,我省略了其他细节但文件名。
答案 0 :(得分:3)
shell负责在命令行上扩展globs。执行的命令看不到那些通配符:它看到扩展的参数。
如果要查看这些内容是如何展开的,请尝试使用echo
预先添加所需的命令。像这样:
$ touch ABCD
$ touch 201604
$ touch foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*
ls -lrt ABCD foo_ABCD_bar_201604_baz
$ echo ls -lrt *201604*
ls -lrt 201604 foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt foo_ABCD_bar_201604_baz
$ rm foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt *ABCD*201604*
请注意,在最后一行,glob不再扩展为文件名,因此ls
命令将被赋予参数*ABCD*201604*
,该参数命名一个不存在的文件。
编辑:
如果您将echo
添加到实际命令中,我希望您的结果为
$ echo ls -lrt *RFPTDW*20160425*
ls -lrt *RFPTDW*20160425*
在第一种情况下,
$ echo ls -lrt *RFPTDW*20160425*
ls -lrt RFPTDW107_01_01_20160425_1526.txt RFPTDW059_01_01_20160425_1527.txt
在第二种情况下。在第一种情况下,文件不存在,因此glob不会扩展为任何内容。在第二种情况下,一些文件与glob匹配,因此shell可以扩展它。
答案 1 :(得分:2)
有时字符编码就是问题所在。 Unicode中的字符看起来与ASCII字符完全相同(所谓的同形字符)。所以也许有“特殊”字符只有在你复制粘贴时才有效。
有时很难区分ASCII字符,如0-O(零,字母O)或1 - A=zeros(5,factorial(5)^5)
(单字母和字母L)