Что означает «-» (двойная черта) в этой команде оболочки?


13

У меня есть эта команда оболочки:

kill `cat -- $PIDFILE`

Что здесь делает двойник? Почему бы не использовать просто

kill `cat $PIDFILE`

Ответы:


20

--Говорит catне пытаться разобрать , что происходит после этого в качестве опции командной строки.

В качестве примера, подумайте о том, что произойдет в двух случаях, если переменная $PIDFILEбыла определена как PIDFILE="--version". На моей машине они дают следующие результаты:

$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.

$ cat -- $PIDFILE
cat: --version: No such file or directory

3
Стоит отметить, что это поведение (хотя и очень распространенное) определяется принимающей программой (т.е. cat), а не оболочкой.
dmckee --- котенок экс-модератора

Есть ли документация или учебник по написанию собственного сценария оболочки, который понимает, что --означает конец параметров командной строки? Я видел те с getopts и другими методами, но ничего не обсуждали --.
CMCDragonkai

3
@CMCDragonkai Вам не нужно заглядывать дальше getopt(1)страницы руководства : «Каждый параметр после параметра« - »всегда интерпретируется как необязательный параметр».
Микаэль Ауно

1

POSIX.1-2017

POSIX также указывает это по адресу: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Рекомендации по синтаксису служебных программ

Руководящий принцип 10:

Первый - аргумент , что это не вариант, аргумент должен быть принят в качестве разделителя , указывающего конец опций. Любые последующие аргументы должны рассматриваться как операнды, даже если они начинаются с символа «-».

Смотрите также: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.