1

cd.. и cd ..

В основном они делают то же самое. Но кто и почему думал об изменении его с пространством или без пространства? Почему есть место и почему нет места между cd и двумя точками?

C:\Windows\System32>cd..

а также

[bla/www/something/something]#cd ..

Они оба одинаковы. Почему у одного есть место, а у другого нет?

РЕДАКТИРОВАТЬ:

Это не дубликат этого вопроса.

Почему «cd ..» работает в командной строке Windows?

1 ответ1

1

В UNIX-подобных системах оболочка sh разделяет то, что вы вводите, на слова и передает каждое слово отдельно в качестве аргумента программе или встроенной команде, на которую ссылается первое слово (само имя команды является нулевым аргументом). Упрощенно, слова разбиты на каждый пробел. Таким образом,

cd ..

это два слова, но

cd..

только один. В UNIX нет команды с именем cd.. , поэтому последняя не работает. Первый вызывает cd с единственным аргументом .. , изменяя один каталог вверх. Для более сложного примера,

echo foo bar  baz   quux

разбирается на четыре слова echo , foo , bar , baz и quux которые затем передаются команде echo качестве аргументов. Количество пробелов между ними теряется, и echo будет печатать

foo bar baz quux

так как он всегда вставляет один пробел между каждым аргументом.

В Windows, DOS и CP/M оболочка COMMAND.COM анализирует имя команды как самый длинный префикс из того, что вы ввели, до тех пор, пока не будет достигнут пробел или пунктуация (это тоже упрощение). Затем команда выполняется со всей строкой, введенной вами в качестве аргумента. Указатель указывает, где интерпретатор команды считает, что имя команды закончилось. COMMAND.COM не разделяет командную строку на аргументы, если программа хочет, чтобы это произошло, она должна сделать это сама.

Например, в cd .. оболочка решает, что cd - это имя команды, которое оказывается встроенной командой. Встроенная команда выполняется со строкой аргумента cd .. и информацией о том, что первые два символа образуют имя команды. Аналогично, для cd.. оболочка решает, что cd является именем команды, и передает .. качестве имени операнда. Команда cd пропускает имя команды, удаляет остаток из пробела и затем пытается перейти в упомянутый каталог.

Аналогично для

echo foo bar  baz   quux

оболочка вызывает команду echo с echo foo bar baz quux в качестве аргументов и печатает echo должным образом

foo bar  baz   quux

Это причина, почему cd.. работает в DOS, но не в UNIX.

Обе конструкции имеют свои плюсы и минусы, хотя стиль UNIX охватил почти все системы, так как программировать намного проще, поскольку только одна программа (оболочка) должна знать, как разбить командную строку на слова, в отличие от каждой программа, имеющая собственное домашнее решение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .