Ich habe ein Shell-Skript testShell.sh
, das getopts
wie folgt verwendet:
#!/bin/bash
while getopts ":j:e:" option; do
case "$option" in
j) MYHOSTNAME=$OPTARG ;;
e) SCRIPT_PATH=$OPTARG ;;
*) ;;
esac
done
echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"
Wenn ich es teste, führe ich es folgendermaßen aus:
$ testShell.sh -jvalue1 -evalue4 -Djvalue3 -pvalue2
Die Ausgabe, die ich erhalte, ist folgende:
j=value3
e=2
remaining=
Aber ich möchte die Ausgabe als:
j=value1
e=value4
remaining=-Djvalue3 -pvalue2
Kann man sicherstellen, dass getopts
nur das erste Zeichen nach dem -
Symbol aussieht ? damit es nicht -Djvalue3
als -jvalue3
und -pvalue2
als interpretiert -e2
.
Antworten:
Nachdem ich es in 3 Foren gepostet und überall gesucht habe ... habe ich irgendwann folgendes ausprobiert und es hat funktioniert ...
Beachten
nach dem
-evalue4
Und die Ausgabe war
Ich glaube,
--
bittetgetopts
, Verarbeitungsoptionen zu stoppen.quelle
getopt(3)
: > Das Sonderargument "-" erzwingt ein Ende des Options-Scans unabhängig vom Scan-Modus. Also ja. Dies wird üblicherweise als Sicherheitsmaßnahme bei der Massenzuweisung verwendet, wenn Dateinamen als Argument interpretiert werden könnten.