Was bedeutet -) in der Fallstudie von bash?

387
scrapy

Ich habe ein Code-Snippet gesehen, das eine Fallstruktur enthält.

while true; do case "$1" in --prepare) echo "prepare" ENV_PREPARE exit 0 ;; --sleep) SLEEP_TIME=$2 shift 2 ;; --) shift break ;; *) echo "Internal error!" exit 1 ;; esac done 

Was bedeutet -) in der Fallstudie von bash?

 --) shift break ;; 
1
Das ist seltsam. Das habe ich noch nie gesehen. [Wenn Sie sich die Bash-Manpage ansehen, wird nicht darauf verwiesen] (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html). JakeGould vor 6 Jahren 0
Es hat nichts zu bedeuten. In diesem Fall sind es nur zwei Striche. Offensichtlich hat jemand diesen Code geschrieben, um die Argumente des Skripts zu analysieren, und ging zu eigenen Lösungen über "case". Ich bin mir ziemlich sicher, dass, wenn Sie den Code untersuchen, Sie dort $ 2 finden und möglicherweise $ 3 und so weiter. `--` wird einfach als -" Verarbeitungsoptionen anhalten (keine weiteren Optionen) verwendet, alle anderen Parameter sind Daten ". Wo sich Daten befinden, können beispielsweise Quelle / Ziel usw. sein. Alex vor 6 Jahren 1

1 Antwort auf die Frage

4
Spiff

Es bedeutet nichts Besonderes zu schlagen.

Der Autor dieses Snippets wollte zwei andere Bindestriche ohne weitere Zeichen verwenden. Wörtlich "-".

Viele Unix-Befehlszeilen-Tools, insbesondere aus dem GNU-Erbe, lassen Sie "-" als Trennzeichen verwenden, um zu bedeuten, dass "nichts, was über diesen Punkt hinausgeht, als Option behandelt werden sollte. Der Rest dieser Befehlszeile besteht aus Argumenten (z. B. einer Liste von Dateinamen für einen Befehl, der auf Dateien wirkt). “ Auf diese Weise können Sie beispielsweise eine Datei mit dem Namen "--help" löschen, indem Sie Folgendes eingeben:

 rm -- --help 

Es wird davon rmausgegangen, dass "--help" eine lange Option ist, um die Hilfeanweisung zu sehen. (Dies ist ein schlechtes Beispiel, aber ich denke, Sie verstehen, was ich meine.)

Ich glaube, der Autor dieses Skripts wollte "-" so in seinem Skript arbeiten.