bash (или то, что вы используете в качестве оболочки), первым прочитает любой ввод и начнет интерпретировать специальные символы, такие как ?
и *
. *
расширяется до любых совпадений в CWD, что означает, что звездочка заменяется указанными совпадениями.
В большинстве случаев это довольно прямолинейно, но может время от времени приводить к некоторым запутанным случаям.
Учтите следующее. Каталог имеет это содержимое:
- тест (обычный файл)
- test1 (каталог)
- test2 (каталог)
- test3 (каталог)
Если вы наберете mv *
что-то странное, то произойдет: test3
есть, но остальное пропало. Поначалу это странно, но имеет смысл, когда вы поймете, что на самом деле передает bash mv
. Из-за звездочки bash интерпретируется mv *
как mv test test1 test2 test3
, и когда mv получит этот список, он будет предполагать, что последний аргумент - это пункт назначения, куда все файлы были бы перемещены.
Что касается команд, которые вы перечислили:
echo *
может функционировать как беднякls
. Оболочка расширит звёздочку до того, что находится в этом каталоге, и, как я уверен, вы уже знаете,echo
буквально отобразит все, что bash передал ей в качестве аргументов.cp temp temp*
будет вести себя примерно так же, какmv
команда, которую я описал выше, за исключением случаев, когда есть только один каталог с именем temp, в этом случае имя источника и назначения совпадают, то есть ничего не будет сделано.