Що означає "-" в термінальних командах?


23

Я бачив багато навчальних посібників, які використовують --команди after. Щось на зразок цього:

command -- 

Що це --означає?


Які відеоуроки?
The Wanderer


Власне, я здивований, що це питання вже не було дурою щодо АС. Чи не відповідають однакові запитання щодо інших спільнот StackExchange як обману (а саме посилання, яке надає @edwinksl)? Що в цьому береться? Можливо, я повинен це запитати на META ....
Cbhihe

@Cbhihe Мені не відомий механізм, який дозволяє нам вказувати на дублювання цілей інших сайтів SE. У всякому разі, це трапляється не надто часто, тому, мабуть, у цьому немає потреби.
edwinksl

3
@ anonymous2 чому б у світі ми це зробили? Питання тут на тему, тож воно може залишитися. Переміщення його видалить інформацію з АС і не додасть нічого нового до U&L, тому я не розумію, чому це було б добре.
тердон

Відповіді:


46

--Використовується , щоб вказати кінець параметрів командного рядка. Це дозволяє використовувати аргументи, починаючи з --. Наприклад, якщо ви створюєте файл під назвою --foo:

$ > '--foo'
$ ls
--foo

А потім спробуйте видалити його, rmі подумаєте, що ви надаєте йому аргумент:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Одним із способів цього є використання --:

$ rm -- --foo

Це звичайна практика і рекомендується POSIX , тому вона підтримується багатьма програмами.


13
Він взагалі не реалізований. Це є особливістю rmпрограми і багатьох POSIX-сумісних утиліт. Див. Посібник 10 . Щоб перевірити, чи не Bash виконує цю роботу (і це не має сенсу), просто створіть невеликий сценарій з just printf '> %s <\n' "$@"і запустіть його --.
gniourf_gniourf

3
@gniourf_gniourf d'oh! Я перевірив, написавши невеликий сценарій perl, який друкує його параметри, і він не бачить жодного, якщо ви передасте його --, але, звичайно, це просто тому, що відповідний модуль Perl ( getopts) також підтримує його. Ви абсолютно праві, я просто швидко пошукав man bash, побачив розділ, який я цитував, але не помітив, що він знаходиться в розділі "Параметри командного рядка". Дякуємо за виправлення, відповідь відредагована.
тердон

1

Більшість команд використовуватиме a - для того, щоб сказати команді, що подальші параметри слід обробляти по-різному. Одним із прикладів є назва rm - --filename, зазначене вище. Інший приклад, такий сценарій, як 'startx', буде інтерпретувати все все раніше - і передавати все після нього на X-сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.