Ответ 1
У меня также есть смутное воспоминание о том, что пробелы в некоторых старых Unix-подобных системах запрещены, но некоторые исследования не подтверждают это.
Согласно этой статье в Википедии, синтаксис #!
был введен в Версии 8 Unix в январе 1980 года. Первоначальное объявление этой функции Денисом Ритчи гласит:
Система была изменена так, что если запускается исполняемый файл с магическими символами
#!
, остальная часть строки понимается как быть именем интерпретатора для исполняемого файла. Ранее (и фактически все еще) раковина сделала большую часть этой работы; это автоматически выполняется сам по себе в текстовом файле с режимом выполнения, когда текст имя файла было введено как команда. Помещение объекта в Система дает следующие преимущества.
[СНиП]
Чтобы воспользоваться этой замечательной возможностью, поставьте
#! /bin/sh
в левом поле первой строки ваших сценариев оболочки. Пробелы после
!
все в порядке. Используйте полный путь (без поиска). На момент, когда вся строка ограничена 16 символами, но это ограничение будет поднят.
Можно предположить, что некоторые более поздние Unix-подобные системы поддерживали синтаксис #!
, но не допускали пропусков после !
, но, учитывая, что самая первая реализация явно допускала пропуски, это кажется маловероятным.
Ответ leonbloy предоставляет больше контекста.
ОБНОВЛЕНИЕ:
Сам интерпретатор Perl распознает строку, начинающуюся с #!
, даже в системах, где это не распознается ядром. Запустите perldoc perlrun
или посмотрите эту веб-страницу для получения подробной информации.
# линия всегда проверяется на наличие переключателей, так как линия разобран. Таким образом, если вы находитесь на машине, которая допускает только один аргумент С#! линия или, что еще хуже, даже не распознает #! линия, ты все еще может получить согласованное поведение переключателя независимо от того, как Perl был вызывается, даже если -x использовался для поиска начала программы.
Perl также разрешает пробелы после #!
.
(Лично я предпочитаю писать строку #!
без пробелов, но она будет работать в любом случае.)
И ответ leonjoy указывает на эту веб-страницу Свена Машика, в которой рассказывается об истории #! в глубине. (Я упоминаю об этом сейчас из-за недавнего обсуждения comp.unix.shell.)