Ich schaue in den unten angezeigten Code und prüfe die Eingabe, ob die Zeilen- / Spaltenargumente entweder mit -r
oder beginnen -c
. Was ${1:0:2}
heißt in diesem Zusammenhang?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
user165213
quelle
quelle
bash
.getopt
odergetopts
es Ihnen leichter machen (oder das Leben dessen, der dies getan hat).Antworten:
Dies ist ein Substring-Erweiterungsmuster (Unterklasse von Parameter Expansion) der Shell.
Das Format ist:
und die Indizierung beginnt bei 0.
Angenommen, Sie haben eine Variable
foo
, dann${foo:0:2}
ergeben sich die ersten beiden Zeichen (ab Position 0 die nächsten 2).Beispiel:
In Ihrem Fall
1
bezieht sich die erste Zahl auf den Variablennamen$1
, dh das erste Argument, das über die Befehlszeile (im Hauptprogramm) oder an die Funktion übergeben wird.Also in Ihrem Fall
"${1:0:2}"
wird:Beginnen Sie mit dem Extrahieren des Teilstrings ab Index 0, dh ab dem ersten Zeichen
und fahren Sie mit den nächsten beiden Zeichen fort
Nach der Operation erhalten Sie die ersten beiden Zeichen (bei 0 und 1 indiziert) der Eingabezeichenfolge.
Mit
[ "${1:0:2}" != $rowArgName ]
und[ "${1:0:2}" != $colArgName ]
wird überprüft, ob der Ausgabe-Teilstring mit einigen anderen Zeichenfolgen übereinstimmt.quelle
-c
oder bereitgestellt hat oder nicht-r
, die wahrscheinlich besser mitgetopts
Ein kleiner Auszug aus
man bash
:quelle
Dies ist eine einfache Teilstring-Extraktion aus einer Variablen. Die betreffende Variable ist der erste Parameter des Skripts (das ist
1
).Wenn ich eine Variable habe, FOO, kann ich die ersten beiden Zeichen ihres Wertes mit sehen
${FOO:0:2}
. Dasselbe geschieht in Ihrem Beispiel mit dem ersten Argument.quelle