Я только начинающий использование Mac и был расстроен, что параметры командной строки требуются сразу после команды так, чтобы это работало:
ls -la /usr
но это не делает:
ls /usr -la
ls: - la: Никакой такой файл или каталог
Там какой-либо путь состоит в том, чтобы изменить это? Или кто-то может сказать мне, почему размещение опций является агностиком на большинстве платформ Linux, но не на Mac?
Linux использует инструменты GNU. OS X использует инструменты BSD. Инструменты BSD намного более требовательны в отношении порядка и присутствия параметров командной строки.
Обработка командной строки определяется в исходном коде программы, которая стала определенной командой.
Как правило, набор команд пользуются определенной библиотекой обработки командной строки (GNU getargs, или в случае сценариев Perl GetOpts:: Долго примеры такого), хотя, была ли обработка командной строки скручена вручную или пользовалась какой-либо определенной библиотекой, совершенно зависит от команды.
Поэтому способности обработки командной строки (например, поддержка переупорядочения, использования --
формировать рисунок конца флагов, сворачивания -a -b
в -ab
, и т.д....), зависят полностью от исходного кода отдельных приложений и/или библиотек, которыми они пользуются.
Определенный шаблон, который Вы отметили, происходит, вероятно, из-за отличающихся библиотек обработки командной строки (или отдельный скрученный вручную код обработки аргумента, используемый разработчиками) между Linux с его корнями GNU и OSX (IIRC, источники BSD, но не уверен)
Причины вероятны в библиотеках обработки командной строки, но если бы я должен был предположить мотивацию строгих библиотек упорядочивания, то она должна наложить непротиворечивость. Сначала названный параметрами затем позиционные параметры. После того как непротиворечивость наложена, она делает командные строки легче проанализировать мысленно.