сопоставление с образцом без эха

сопоставление с образцом без эха

Почему результаты разные?

touch a aa bb ccc

echo *

a aa bb 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.

Связанный контент