為什麼輸出不同?
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(目前工作目錄)有檔案a
、aa
、bb
和ccc
.
然後,此命令將列印目錄中的所有檔案:
$ 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
。