Bash
為什麼 echo 匹配某些文件兩次?
$ touch file{1..12} $ echo *e{1..12} file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12 $ echo *{1..12} file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12
我不明白為什麼會這樣。請問有人可以解釋嗎?
大括號不是萬用字元模式。檢查bash 擴展的文件:大括號在此過程中很早就被擴展,萬用字元模式在最後一步中擴展¹。
最初,該命令由兩個單詞
echo
,組成*{1..12}
。大括號展開後,命令包含 13 個單詞:echo
,*1
,*2
, …,*12
. 然後擴展萬用字元模式。*1
擴展為以 結尾的文件名列表1
,其中不僅包括,file1
還包括file11
(之後按字典順序排序)。同樣*2
擴展到file12
和file2
(按此順序)。所以你得到echo
,file1
,file11
,file12
,file2
, 然後是匹配單個文件的其他萬用字元:file3
,file4
, …,file12
.¹倒數第二個,如果您按照手冊的描述進行操作,但“引號刪除”並不是真正的事情——引號在擴展過程之前被解析。