В чем разница - (один дефис) и & mdash; (два дефиса) в команде? [Дубликат]

Если использование n не работает, вы можете установить последнюю версию nodejs (т.е. версия 8), выполнив следующие команды:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install -y nodejs

Дальнейшие инструкции здесь. [!d1 ]

1
задан 30 August 2016 в 12:32

3 ответа

Как правило:

- означает чтение аргумента / содержимого из STDIN (дескриптор файла 0) -- означает конец параметров команды, все последует за аргументами

Зачем нужно:

О -:

$ echo foobar | cat -
foobar

Хотя cat может читать содержимое из STDIN, не требуя -, многим командам необходимо это и их man

Теперь о --, я создал файл -spam, давайте cat файл:

$ echo foobar >-spam  

$ cat -spam         
cat: invalid option -- 'p'
Try 'cat --help' for more information.

$ cat -- -spam      
foobar

Без --, [ f13] принимает s, p, a, m все как опции, поскольку они следуют -, -- явно указывает конец опций, после чего -spam принимается как имя файла.

21
ответ дан 23 May 2018 в 07:04
  • 1
    О, это тоже правда: D Я предположил, что он имел в виду -- и - перед вариантами: D – Rinzwind 17 August 2016 в 13:41
  • 2
    вы также можете использовать cat ./-spam – Lưu Vĩnh Phúc 18 August 2016 в 10:03

Это действительно зависит от соответствующей программы.

Команда find, например, принимает параметры полного имени с одиночными дефисами:

find . -iname "*.jpg" -delete

Однако, в общем, двойные дефисы означают ключ, который является полным словом, а отдельные дефисы означают swich, который является одной буквой. И однобуквенные переключатели могут быть объединены, а это означает, что все следующие команды эквивалентны:

cp --verbose --recursive /dir/from /dir/to
cp -v -r /dir/from /dir/to
cp -vr /dir/from /dir/to

Двойной дефис, за которым следует пробел, также может использоваться для обозначения «это конец команд все последующее - это имя файла, даже если оно похоже на команду ".

И один дефис без следующих букв может указывать« читать из stdin, а не из файла ».

Однако принудительно . Любая данная программа может нарушить любой из этих стандартов, как это видно, например, с find.

6
ответ дан 23 May 2018 в 07:04
  • 1
    Правильный ответ. – Jacob Vlijm 17 August 2016 в 19:32
  • 2
    +1. Может быть, даже не стандартная, а более свободно придерживающаяся, предпочтительная конвенция. – user2943160 18 August 2016 в 04:33
  • 3
    Части его действительно стандартные. Не --option, который является GNUism, но синтаксический анализ -vr как эквивалент -v -r (когда -v является опцией, которая не принимает аргумент option) закреплена в синтаксисе утилиты POSIX руководящие принципы и, следовательно, обязательны для совместимых реализаций инструментов, указанных в POSIX. – Charles Duffy 19 December 2017 в 21:11

Один дефис - это способ, которым команда традиционно была присвоена командам Unix. У них есть одна минута, за которой следует одна буква (или иногда число) (-a -i -T). За некоторыми параметрами следует аргумент (-ofilename -o filename).

В основном используется два дефиса - и это предпочтительный способ предоставления параметров - для программ / команд в GNU-системах - т.е. в основном на Linux-системах. У них есть два гипса, за которыми следуют одно или несколько слов, разделенных одиночными гипсовыми (--version --ignore-case). Опции с аргументами используют знак равенства для разделения параметра и аргумента (--log-file=filename)

Недостатком старых опций с одним делом является то, что нет стандартной буквы, чтобы делать то же самое по разным командам. Да, -v часто используется для «verbose» - и -V иногда используется для «версии», но между командами нет реального согласия. Например, -i означает «интерактивный» для cp, mv, ln и rm - команда будет запрашивать перед перезаписью или удалением. Но это означает «игнорировать дело» в grep. Чтобы сделать это еще сложнее, команда sort использует -f - для «случая сложения» - таким же образом, чтобы игнорировать верхний и нижний регистр. Чтобы сделать путаницу законченной, многие команды, включая mv и cp, используют -f для «force» ... что команда options что-то делает (например, перезаписывает существующий файл) хотя это обычно не будет.

Кроме того, команды для разных Unix-систем (Solaris, * BSD, SysV, AIX, ...) могут использовать разные буквы, чтобы делать то же самое , Например, команда who перечисляет пользователей в системе. Эта команда может опционально отображать, какие пользователи принимают сообщения от других пользователей к их терминалу - опция для этого - -w под Linux, в то время как Solaris использует -T.

Длинные опции, с другой стороны, позволяют тот же вариант, который будет использоваться для всех команд, и они фактически описывают, что делают параметры. Например, --ignore-case, --interactive, --version, --force. Таким образом, --ignore-case используется как в grep, так и в sort.

Но опять же, они почти используются только в командах / программах, сделанных как часть проекта GNU ...

Наконец, двойной hypen используется, чтобы сообщить команде, что список опций закончен, и что следует за аргументами - независимо от того, насколько они могут выглядеть как параметры. Если имя файла начинается с дефиса (например, -this_is_a_bad_filename), команды могут смутить его с помощью опции и попытаться разобрать его - это означает, что это означает двойное дефис. mv -vi -- -this_is_a_bad_filename this_is_a_better_filename (только команда, которую вы должны использовать, если имя файла начинается с дефиса ...; -)

3
ответ дан 23 May 2018 в 07:04

Другие вопросы по тегам:

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