Общее определение для этого, вероятно, не будет найдено в руководстве по Bash, но спецификацией POSIX (раздел Разрешение имени пути):
Точка специального имени файла должна указывать на каталог, указанный его предшественником.
Ну, а какой предшественник у нас только есть .
? Я подчеркнул важную часть:
Если имя пути не начинается с косой черты, то в качестве текущего рабочего каталога процесса следует использовать предшественника первого имени файла пути.
Также,
Имя пути, которое содержит по крайней мере один символ без косой черты и заканчивается одним или несколькими завершающими слешами, должно быть разрешено, как если бы к имени пути был добавлен один символ точки ('.').
Таким образом, когда вы ./
это решается как ./.
, который в основном указывает на ваш текущий рабочий каталог. Когда вы что-то наберете в своей оболочке и нажмете Enter , оболочка попытается выполнить первую часть как команду. (В основном первая группа символов до первого пробела.)
Не существует команды или исполняемого файла ./.
, поэтому он потерпит неудачу и скажет вам, что ./
"это каталог". Интересно, что .
это команда (это встроенная команда также нашли в качестве source
поэтому , когда вы просто .
вы получите: bash: .: filename argument required
.