O que significa "--" (traço duplo) neste comando shell?

O que significa "--" (traço duplo) neste comando shell?

Eu tenho este comando shell:

kill `cat -- $PIDFILE`

O que o duplo faz aqui? Por que não usar apenas

kill `cat $PIDFILE`

Responder1

A --instrução diz catpara não tentar analisar o que vem depois como opções de linha de comando.

Por exemplo, pense no que aconteceria nos dois casos se a variável $PIDFILEfosse definida como PIDFILE="--version". Na minha máquina, eles dão os seguintes resultados:

$ 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

Responder2

POSIX.1-2017

POSIXtambém especifica em:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Diretrizes de Sintaxe de Utilitários

Diretriz 10:

O primeiro--argumento que não é um argumento de opção deve ser aceito como um delimitador indicando o fim das opções. Quaisquer argumentos seguintes devem ser tratados como operandos, mesmo que comecem com o caractere '-'.

Veja também:https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

informação relacionada