簡體   English   中英

Unix命令ls -lrt給出意外結果

[英]Unix command ls -lrt giving unexpected results

因此,我正在做我的工作,我需要在文件夾中列出一些特定的文件。 我輸入ls -lrt *ABCD*201604* ,並返回*ABCD*201604* not found

然后,查看是否確實存在此類文件,我執行ls -lrt並發現存在此類文件。

因此,接下來我在鍵入命令ls -lrt *ABCD*201604* ,從列出的文件中復制了ABCD201604 ,並且成功了!

我比較了我的兩個命令,看是否做錯了,但發現兩者完全相同。 對這種行為有任何解釋嗎?

我寫的一則:

$ ls -lrt *RFPTDW*20160425*
*RFPTDW*20160425* not found

我復制的一個:

$ ls -lrt *RFPTDW*20160425*
RFPTDW107_01_01_20160425_1526.txt
RFPTDW059_01_01_20160425_1527.txt

在第二個輸出中,我省略了其他詳細信息,但文件名除外。

Shell負責在命令行上擴展glob。 執行的命令看不到那些通配符:它看到擴展的參數。

當您想查看它們的擴展方式時,請嘗試在想要的命令前加上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匹配,因此shell可以對其進行擴展。

有時字符編碼是個問題。 Unicode中的某些字符看起來與ASCII字符完全相同(所謂的同形字符)。 因此,也許有些“特殊”字符僅在復制粘貼時才起作用。

同樣,有時很難區分ASCII字符,例如0-O(零,字母O)或1- l (一個和字母L)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM