Широкого стандарту немає. Наприклад, в програмах GNU є певна послідовність, але вам потрібно перевірити документацію кожної програми.
Цитуючи Вікіпедію , моє наголос:
У системах, схожих на Unix, дефіс ASCII-мінус зазвичай використовується для визначення параметрів. За символом зазвичай супроводжується одна або кілька літер . Аргумент, який є єдиним дефісом-мінусом сам по собі без будь-яких літер, зазвичай вказує, що програма повинна обробляти дані, що надходять зі стандартного вводу, або надсилати дані на стандартний вихід. У деяких програмах два символи дефісу (-) використовуються для вказівки "довгих опцій", де використовуються більш описові назви опцій . Це загальна особливість програмного забезпечення GNU.
Зазвичай дефіси вказують на попередньо визначений аргумент. Я думаю, що використовується для їх розмежування, наприклад, назви файлів чи інших міток, які ви можете використовувати як аргументи. Це не завжди так (див. Нижче).
Часто ви знайдете один і той же аргумент, як короткий, так і довгий варіант, наприклад, у ls .
Деякі програми використовують один дефіс для односимвольних варіантів та два дефіси для багатозначних варіантів, але не всі (GNU find
приходить на думку). Деякі програми мають необов'язкові дефіси або взагалі пропускають їх ( tar
або ps
на думку BSD ).
Іноді довгі параметри ( --foo
) вимагають аргументів, тоді як короткі параметри ( -f
) не (або принаймні передбачають конкретний аргумент за замовчуванням).
Короткі параметри (наприклад cut -d ' '
) можуть мати аргументи, тоді як довгі варіанти (наприклад ls --all
) не обов'язково їх мають.
Щоб встановити певну поведінку програми, іноді потрібно використовувати короткий варіант, для інших потрібно скористатися довгим варіантом, а для деяких - вибір.
У відповідній примітці деякі програми не обробляють пробіл між опцією та її аргументом , а інші не можуть.
Як я писав на початку, просто немає загальної поведінки чи стандарту. Часто ви можете простежити подібну поведінку до тієї ж бібліотеки, що використовується для розбору аргументів, але ви, мабуть, не хочете читати джерела, щоб дізнатися це.
Ви дійсно не можете зробити синтаксис аргументів однієї програми з іншого.
Якщо ви також вважаєте Windows, це стає ще гіршим: хоча виклики командного рядка Windows традиційно використовують /f
(принаймні більшу частину часу, одиночні символи) для опцій, з :
роздільником між параметрами та їх значенням (див., Наприклад, тут ); крос-платформні утиліти широко розповсюджені (наприклад, ті, які ви згадуєте), і містять більш поширений дефіс синтаксис аргументів, з усіма невідповідностями, згаданими вище.
-i
проти--input
або-n
--dry-run
.