2017-12-15 2 views
0

Ich bin auf ein Code-Snippet unten gestoßen und nicht genau, was ist der Zweck von -? in der While-Schleife. Ich habe mehrere Seiten und Foren nach diesem Parameter durchsucht, konnte aber keine genaue Antwort erhalten.Korn Skriptparameter

Alle Eingänge bitte, danke.

while [[ $1 = -? ]]; do 
    case $1 in 
    -a) a1=alligator ;; 
    -b) a2=bear ;; 
    -c) a3=cougar ;; 
    esac 
    shift 

Antwort

2

In KSH, in doppelten Klammern, die = und == Operatoren sind für Muster übereinstimmt, gefunden [[ string = pattern ]] [1]

Diese sind Expansionsmuster shell Pfadname. ? wird mit jedem einzelnen Zeichen übereinstimmen.

Also, was Sie testen, ist, wenn $1 einen Bindestrich gefolgt von einem einzelnen Zeichen entspricht. Mit anderen Worten, sieht der erste Positionsparameter wie eine Optionsfolge aus?

[1] - Zur Überprüfung der Zeichenkettengleichheit enthält Ihr Muster entweder keine speziellen Globbing-Zeichen oder solche Zeichen sind in Anführungszeichen oder Escapezeichen.


IMO, eine robustere Art und Weise Option Parsing zu tun ist, mit dem getopts builtin:

while getopts :abc opt; do 
    case $opt in 
     a) a1=alligator ;; 
     b) a2=bear ;; 
     c) a3=cougar ;; 
     :) print -u2 "error: missing required argument for -$OPTARG" ;; 
     ?) print -u2 "unknown option: -$OPTARG" ;; 
    esac 
done 
shift $((OPTIND - 1)) 
+0

Vielen Dank Herr !! Das hat mir sehr geholfen und +1 für Ihre detaillierte Erklärung und einen alternativen Ansatz gegeben. – dev

Verwandte Themen