Apa artinya "-" (tanda hubung ganda) dalam perintah shell ini?


12

Saya punya perintah shell ini:

kill `cat -- $PIDFILE`

Apa yang ganda - lakukan di sini? Kenapa tidak pakai saja

kill `cat $PIDFILE`

Jawaban:


20

The --memberitahu catuntuk tidak mencoba mem-parsing apa yang datang setelah itu sebagai opsi baris perintah.

Sebagai contoh, pikirkan apa yang akan terjadi dalam dua kasus jika variabel $PIDFILEdidefinisikan sebagai PIDFILE="--version". Di mesin saya, mereka memberikan hasil sebagai berikut:

$ 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
Perlu dicatat bahwa perilaku ini (sementara sangat umum) didefinisikan oleh program penerima (yaitu cat) dan bukan oleh shell.
dmckee --- ex-moderator kitten

Apakah ada dokumentasi atau tutorial tentang cara menulis skrip shell Anda sendiri yang mengerti itu --berarti akhir dari opsi baris perintah? Saya pernah melihat yang dengan getopts dan teknik lainnya, tetapi tidak ada yang membahas --.
CMCDragonkai

3
@CMCDragonkai Anda tidak perlu melihat lebih jauh dari getopt(1)halaman manual : "Setiap parameter setelah parameter '-' selalu ditafsirkan sebagai parameter non-opsi".
Mikael Auno

1

POSIX.1-2017

POSIX juga menentukannya di: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Pedoman Sintaks Utilitas

Pedoman 10:

Yang pertama - Argumen yang bukan merupakan pilihan-argumen harus diterima sebagai pembatas yang menunjukkan akhir pilihan. Argumen berikut harus diperlakukan sebagai operan, bahkan jika mereka mulai dengan karakter '-'.

Lihat juga: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.