CmdPi
повторяет полученную мудрость о том, что командные интерпретаторы Microsoft работают как оболочки UNIX. Именно так каждый голосовал ногами в 1980-х годах. Но на самом деле они не сделали и до сих пор не делают.
Имена команд могут и могут быть отделены от хвостов команд значительным количеством символов, а не только пробелами. Можно использовать символ равенства, например, или запятую. path=C:\DOS
- это команда и хвост. Так же, как и dir,dos
. Самый известный, можно использовать полную остановку. Отсюда и всем известное echo.
трюк для отображения пустой строки в командном скрипте. Что менее известно, так это echo;
, echo+
, echo=
, echo(
, echo,
echo[
, echo]
, echo\
и echo/
будут делать то же самое (хотя и не всегда для некоторых из них).
Фактически, есть вызов API DOS (int 21h,ax=6505h
), который можно использовать для получения полного списка символов, которые являются так называемыми "символами завершения имени файла". И интерпретаторы команд DOS используют его, чтобы определить, какие символы заканчивают имя команды и начинают хвост команды. (Интерпретаторы команд Microsoft для операционных систем не-DOS, вероятно, просто передают набор символов.)
Обратный слэш является один из этих символов, а в командных интерпретаторов из command
Microsoft в MS-DOS в cmd
Microsoft в Windows NT (включая /cmd
IBM, Microsoft, для OS /2 по пути) можно выполнить cd\
и результат будет тот интерпретатор команд меняет каталог на \
. То, включен ли символ завершения в хвост команды, в действительности зависит от команды. С помощью команды cd
это так. С командами dir
и path
это не так. (Да, анализатор командной строки в интерпретаторах команд Microsoft ведет себя по-разному в зависимости от того, какая встроенная команда должна быть запущена.)
Это никогда не было задокументировано, хотя. Как я уже сказал: большинство людей в 1980-х годах проголосовали ногами за принятие парадигмы оболочки UNIX, хотя такие вещи, как разбор аргументов и цитирование, являются обширной заговорщической выдумкой, реализованной вовсе не интерпретатором команд, а библиотеками времени выполнения нескольких языков программирования. реализации для DOS; и вы обнаружите, что большая часть литературы уверенно заявляет, что пробел отделяет имя от хвоста, хотя на самом деле это не так. echo.
Обычно описывается причуды и хитрости, и очень редко описывается как просто один случай общего синтаксиса, который командные интерпретаторы Microsoft использовали в течение примерно трех десятилетий.
Я рекомендую следовать здесь тенденции 1980-х годов, а не полагаться на этот малоизвестный синтаксис. Используйте пробелы. Это то, что люди документируют. Это то, что сами IBM и Microsoft документируют. Это то, что утверждает народная мудрость. Это то, чего ожидают руководители UNIX. ☺
Мой командный интерпретатор шел с синтаксическими диаграммами и описаниями, которые есть в IBM doco. Однако вы обнаружите, что FreeCOM реализует это мало документированное поведение, как и интерпретаторы команд JP Software и command
из OpenDOS. Документация JP Software рекомендует использовать пробел и описывает использование других символов завершения как "незаконных". Это, однако, одно из немногих мест, в которых фактически говорится в официальной документации, что есть альтернатива.
дальнейшее чтение