Cosa significa "-" (doppio trattino) in questo comando shell?


13

Ho questo comando shell:

kill `cat -- $PIDFILE`

Cosa fa il doppio qui? Perché non usare solo

kill `cat $PIDFILE`

Risposte:


20

Il --dice di catnon provare ad analizzare ciò che viene dopo come opzioni della riga di comando.

Ad esempio, pensa a cosa accadrebbe nei due casi se la variabile $PIDFILEfosse definita come PIDFILE="--version". Sulla mia macchina, danno i seguenti risultati:

$ 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
Vale la pena notare che questo comportamento (sebbene molto comune) è definito dal programma ricevente (cioè cat) e non dalla shell.
dmckee --- ex gattino moderatore,

C'è qualche documentazione o tutorial su come scrivere il proprio script di shell che capisca che ciò --significa la fine delle opzioni della riga di comando? Ho visto quelli con getopts e altre tecniche, ma nulla di cui discutere --.
CMCDragonkai,

3
@CMCDragonkai Non è necessario guardare oltre la getopt(1)pagina man : "Ogni parametro dopo un parametro '-' viene sempre interpretato come un parametro non opzionale".
Mikael Auno,

1

POSIX.1-2017

POSIX lo specifica anche su: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Linee guida per la sintassi dell'utilità

Linea guida 10:

Il primo - argomento che non è un'opzione-argomento dovrebbe essere accettato come un delimitatore che indica la fine delle opzioni. Eventuali argomenti seguenti devono essere trattati come operandi, anche se iniziano con il carattere '-'.

Vedi anche: /unix/11376/what-does-double-dash-mean-also-nown-as-bare-double-dash

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.