Почему существуют короткие и длинные альтернативы для параметров командной строки?

7747
ygoe

Большинство команд unixoid имеют короткие и длинные альтернативы для параметров командной строки, такие как ls -aи ls --all, или ls -Aи ls --almost-all. Почему существуют эти два пути? Один из них короче, другой легче читать и понимать. Но каждый раз, когда я пишу сценарий оболочки, мне нужно решить, какой из них я хочу использовать. Известно ли, почему существуют две альтернативы? Кто был первым, почему был представлен другой? Например, в DOS / Windows практически не учитывается регистр букв из одной буквы.

21

3 ответа на вопрос

23
Gilles

Изначально были только односимвольные варианты. Некоторые программы выбирали несколько символов, но все еще с одной чертой. AFAIK много-символьные опции двойной черты происходят из GNU ; они были введены, потому что они более читабельны и часто более запоминаемы (и их может быть более 52). Многие программы теперь имеют и то и другое: короткие опции для ввода текста в командной строке и запоминания символа, длинные опции для сценариев или в командной строке, если вы помните только более длинное имя опции.

+1 за упоминание о том, что длинные опции лучше для скриптов, потому что они помогают документировать вещи Norman Gray 13 лет назад 13
Что касается «только 52 из них»: попробуйте `ls -BartSimpsonIsJustCool` (или` Great`, если вы находитесь на Solaris. Aaron Digulla 13 лет назад 5
@AaronDigulla Это пасхальное яйцо? user712092 11 лет назад 1
@ user712092 Нет, это трюк. В Linux все, что находится после `I`, является аргументом опции` -I`, поэтому это имеет значение, только если у вас есть файл с именем `sJustCool` в текущем каталоге. Часть `-BartSimpson` может быть переупорядочена, за исключением того, что` S` (сортировка по размеру) должна оставаться после `t` (сортировка по дате). Также `m` не имеет эффекта, когда присутствуют` n` или `o`. Таким образом, команда эквивалентна `ls -BSainopsr`, и если я ничего не пропустил, вы не можете удалить еще одну букву, чтобы получить тот же результат, и вы можете переупорядочить эти буквы свободно. Gilles 11 лет назад 4
@Gilles: кстати, чтобы быть максимально точным, может быть 62 различных коротких варианта (включая цифры), а не 52. Например, рассмотрим `gzip -9 filename`. Radko Dinev 9 лет назад 2
1
Chen Levy

Вы можете догадаться, что это дело вкуса. При наборе текста в командной строке может быть предпочтительнее использовать короткий параметр, особенно в случае параметров запуска (например ls -AL). Длинные опции лучше передают намерения, поэтому вам не нужно обращаться к справочной странице, когда вы читаете ls --almost-all --dereference.

Естественно, когда вы набираетесь опыта, вы можете узнать, что оба варианта -Aи -Lкороткий достаточно хорошо известны и не требуют дополнительной документации. Особенно в сложной команде, которая может комбинировать несколько команд интересными способами с оценкой, перенаправлением и т. Д. В таком случае вы можете предпочесть краткость, а не документацию.

1
jfmessier

Еще одна цель, которую я вижу в различных способах задания параметров (коротких и длинных), заключается в том, что при наборе тексты люди из командной строки Unix / Linux предпочитают иметь как можно более короткие команды. Тем не менее, они могут стать загадочными, и если сценарий написан с использованием этих коротких версий, их может стать трудно понять в будущем. Использование длинной версии может сделать команду SAME более читаемой и понятной для кого-то, кто не является гуру этой команды, особенно если эта команда на самом деле является локально написанным сценарием, а не известной командой.

Похожие вопросы