無回顯的模式匹配

無回顯的模式匹配

為什麼輸出不同?

touch a aa bb ccc

echo *

a aa bb ccc // 我明白了,* 表示匹配零個或多個

*

aa bb ccc // 我很困惑。

echo ?

一個OK

?

a aa bb ccc // 又困惑了。

*?

aa bb ccc // 很困惑

* *

a aa aa bb bb ccc ccc // 非常非常困惑

我想知道使用 echo 和不使用它有什麼區別。

答案1

您編寫的每一行都必須有一個命令,通常是第一個單字。

要列印某些內容,常用命令是echo

如果 pwd(目前工作目錄)有檔案aaabbccc.
然後,此命令將列印目錄中的所有檔案:

 $ echo *
 a aa bb ccc

此命令將列印 pwd 中包含一個字元的所有檔案:

$ echo ?
a

但是,如果您不提供命令,則第一個「單字」(大多數情況下:直到第一個空格)將被視為命令。

如果您只提供星號*,則星號展開後的第一個單字將用作要執行的命令。

如果該命令a不存在,則會列印錯誤:

$ *
bash: a: command not found

如果有一個命令被調用a,它將使用三個參數來調用aa bb ccc

由於您沒有提供更多詳細信息,我們只能猜測正在使用該名稱執行哪個命令a(它不是預設命令)。我們也不知道您使用的是哪一種外殼。

但你所有的例子都顯示第一個a缺失:

$ *
aa bb ccc              ### missing first `a`.
$ *?
aa bb ccc              ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc  ### missing first `a`.

除了:

$ ?
a aa bb ccc

由於我們不知道命令是什麼,因此很難做出任何結論a

相關內容