无回显的模式匹配

无回显的模式匹配

为什么输出不同?

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

相关内容