Я новачок в роботі оболонки, і використання цих команд здається довільним. Чи є причина, що один прапор має один тире, а інший - подвійний тире?
Я новачок в роботі оболонки, і використання цих команд здається довільним. Чи є причина, що один прапор має один тире, а інший - подвійний тире?
Відповіді:
Один дефіс може супроводжуватися кількома однозначними прапорами. Подвійний дефіс префіксує один, багатохарактерний варіант.
Розглянемо цей приклад:
tar -czf
У цьому прикладі, -czf
визначають три односимвольних прапори: c
, z
і f
.
Тепер розглянемо інший приклад:
tar --exclude
У цьому випадку --exclude
вказується одна опція з багатохарактерним іменем exclude
. Подвійний дефіс усуває неоднозначність аргументу командного рядка, гарантуючи , що tar
інтерпретує це як , exclude
а не поєднання e
, x
, c
, l
, u
, d
, і e
.
cdrecord
згадувалося років тому у вищезазначених коментарях.
Все залежить від програми. Зазвичай "-" використовується для "коротких" параметрів (однобуквенна, -h), а "-" використовується для параметрів "long" (er) (--help).
Короткі варіанти зазвичай можна комбінувати (так що "-h -a" те саме, що "-ha")
У системах, схожих на Unix, дефіс ASCII-мінус зазвичай використовується для визначення параметрів. За символом зазвичай супроводжується одна або кілька літер. Аргумент, який є єдиним дефісом-мінусом сам по собі без будь-яких літер, зазвичай вказує, що програма повинна обробляти дані, що надходять зі стандартного вводу, або надсилати дані на стандартний вихід. У деяких програмах два символи дефісу (-) використовуються для вказівки "довгих опцій", де використовуються більш описові назви опцій. Це загальна особливість програмного забезпечення GNU.
Це дійсно умовність. Однак це може допомогти парсерам більш ефективно знати варіанти, передані програмі. Крім того, є акуратні утиліти, які можуть допомогти проаналізувати ці команди, такі як getopt(3)
або нестандартні getopt_long(3)
для розбору аргументів програми.
Це добре, адже у нас може бути кілька коротких варіантів у поєднанні, як говорять інші відповіді tar -xzf myfile.tar.gz
.
Якби був аргумент "lisa" для ls
, напевно, він мав би інше значення, ls -lisa
ніж тип ls --lisa
. Перші є l
, i
, s
і a
параметри, а не слова.
Насправді ви могли б написати ls -l -i -s -a
, значить точно так само, як ls -lisa
, але це залежало б від програми.
Є також програми, які не дотримуються цієї конвенції. Найбільше, на мій погляд, dd
і gcc
.
короткі варіанти з одинарним тире і довгі варіанти з подвійним тире
короткі варіанти можна об'єднати в один аргумент;
for example: ls -lrt #instead of ls -l -r -t
Якщо ми дозволяємо довгі варіанти з одним тире, це викликає неоднозначність. Для вирішення цього питання ми використовуємо подвійний тире для довгих варіантів.