为什么输出不同?
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
。