Bash Advanced Variable Idioms für die Verwaltung der Groß-/Kleinschreibung
Wann immer wir mit Textzeichenfolgen arbeiten, stellt sich früher oder später die Frage der Groß- und Kleinschreibung. Muss ein Wort vollständig in Großbuchstaben geschrieben sein, vollständig in Kleinbuchstaben, mit einem Großbuchstaben am Anfang des Wortes oder Satzes usw.
Ein Idiom ist ein natürlicher sprachlicher Ausdruck einer einfachen Programmieraufgabe. Zum Beispiel ist das Wort sleep im Befehl sleep 10 (der das Terminal, in dem man arbeitet, für zehn Sekunden pausiert) ein natürlicher Ausdruck eines zeitbasierten Codierungskonstrukts, das im Bash GNU coreutils-Softwarepaket entwickelt wurde.
Es gibt eine Reihe spezieller variablengebundener Idiome (d.h. Suffixe, die an einen Variablennamen angehängt werden können, um anzugeben, was wir mit einer bestimmten Variablen tun möchten), die in Bash verwendet werden können, um diese Art von Konvertierungen einfacher im laufenden Betrieb durchzuführen, anstatt beispielsweise den Sed Stream Editor mit einem regulären Ausdruck verwenden zu müssen, um dasselbe zu tun.
Wenn Sie an der Verwendung regulärer Ausdrücke interessiert sind, werfen Sie einen Blick auf unsere Bash-Regexps für Anfänger mit Beispielen Fortgeschrittene Bash-Regex mit Beispielen!
Dies erleichtert die Arbeit mit Variablen, die eine Änderung der Groß-/Kleinschreibung erfordern, oder das Testen von If-Anweisungen erheblich und bietet eine große Flexibilität. Idiome können direkt innerhalb der if-Anweisungen hinzugefügt werden und müssen keine Subshell mit sed verwenden.
Während die Syntax auf den ersten Blick etwas komplex aussieht, werden Sie, sobald Sie einen kleinen mentalen Unterstützungstrick gelernt haben, um sich die richtigen Tasten zu merken, auf dem besten Weg sein, diese Redewendungen in Ihrem nächsten Skript oder Bash-One-Liner-Skript auf der Befehlszeile zu verwenden!
In diesem Tutorial lernen Sie:
- Verwendung der Variablenwendungen
^,^^und,,Bash-Variablensuffixe - So verwenden Sie eine
Bereichsidiom für reguläre Ausdrücke []in Kombination mit diesen - Wie man die Redewendungen
^und,direktaus denif-Anweisungen heraus verwendet - Detaillierte Beispiele für die Verwendung von
^,^^und,,
Bash Advanced Variable Idioms für die Verwaltung der Groß-/Kleinschreibung
Verwendete Softwareanforderungen und Konventionen
Beispiel 1: Vollständige Variablen in Großbuchstaben schreiben
Beginnen wir mit einem Beispiel, das zeigt, wie man eine Variable in Großbuchstaben druckt:
VAR='make me uppercase'; echo "${VAR^^}"
MAKE ME UPPERCASE
Zuerst stellen wir die Variable VAR so ein, dass ich in Großbuchstaben schreibe. Die Art und Weise, wie wir dies getan haben, besteht darin, ^^ am Ende des Variablennamens zu verwenden – ein Suffix, ein Bash-Idiom, um den internen Bash-Interpreter anzuweisen, unseren Text durch die Großbuchstabenversion zu ersetzen.
Beachten Sie, dass jedes Mal, wenn man eine Variable setzt, die VAR=-Syntax verwendet wird und die führende Variable ($) des Bash-Idioms weggelassen wird. Nachfolgende Verwendungen, die selbst keine Neuzuweisungen sind, verwenden die $-Syntax. Daher verwendet das Echo $.
Sie können auch sehen, dass { und } um den Variablennamen herum verwendet werden. Dies ist zwar nicht unbedingt erforderlich:
VAR=1; echo $VAR
1
Es ist sehr zu empfehlen, und ich persönlich empfehle es auch, Variablen immer korrekt zu zitieren, da es Fehler und sogar Probleme vermeidet, wie z.B. wenn es für den Bash-Interpreter hinter den Kulissen nicht klar ist, wann eine Variable endet:
VAR='a'; echo "$VARa"
Im ersten Beispiel sieht der Bash-Interpreter einen Variablennamen, der mit ($) beginnt, und liest so lange, bis er ein Leerzeichen erreicht, wie hier zu sehen ist:
VAR='a'; echo "$VAR a"
a
Hier mussten wir einen Raum einführen, damit unser Echo korrekt funktioniert.
Mit anderen Worten, in unserem vorherigen Beispiel ist der Variablenname, den Bash sieht, VARa und kann nicht aufteilen/sehen, wo die Variable endet und der Rest der Zeichenkette zur Ausgabe beginnt oder neu gestartet wird. Vergleichen wir dies mit der korrekten Kapselung von Variablen mit { und }:
VAR='a'; echo "${VAR}a"
aa
Hier sind keine Probleme zu erkennen; Für den Bash-Interpreter ist klar, dass $ {VAR} die Variable ist und a der Text, der danach folgen soll, alles dank der korrekten Kapselung unserer Variablen.
Dies bedeutet auch, dass die spezielle ^^-Redewendung und andere solche Bash-Redewendungen verwendet werden. Lassen Sie uns dies beispielhaft veranschaulichen:
VAR='make me uppercase'; echo $VAR^^
make me uppercase^^
VAR='make me uppercase'; echo "$VAR^^"
make me uppercase^^
In diesem Fall kann Bash erkennen, dass wir möchten, dass die VAR-Variable gedruckt wird, interpretiert ^^ jedoch als Standardtext. Wie aus diesem und früheren Beispielen deutlich zu sehen ist, empfiehlt es sich, Variablennamen immer mit { und } zu umgeben.
Beispiel 2: Vollständige Variablen in Kleinbuchstaben schreiben
Nachdem wir nun gesehen haben, wie man eine vollständige Variable mit dem ^^ Idiom in Großbuchstaben schreibt, schauen wir uns an, wie man ganze Variablen mit dem ,, Idiom in Kleinbuchstaben ändert:
VAR='MAKE ME LOWERCASE'; echo "${VAR,,}"
make me lowercase
Es ist ein interessantes Syntax-Idiom, ,, als Suffix für die Variable zu verwenden, aber es funktioniert korrekt, wie gezeigt.
Ein kleiner Trick zur mentalen Unterstützung, um sich diese zu merken
Eine großartige Möglichkeit/Methode, sich an etwas zu erinnern, besteht darin, visuell zu bestätigen oder sich vorzustellen, was auch immer erinnert werden muss. Wenn du ein paar mentale Konstrukte hinzufügen kannst, wie z.B. Beziehungen zu anderen Dingen herzustellen, wirst du dich wahrscheinlich beim nächsten Mal an dasselbe erinnern.
Diese dienen dazu, einen Blick auf Ihre physische Tastatur zu werfen, und wenn Sie wie ich eine Querty-Tastatur verwenden, werden Sie sehen, dass ^ SHIFT-6 ist und ',' direkt neben dem m steht. Wie hilft das?
Zuerst befindet sich die Taste 6/^ oben und die Taste , unten. Als nächstes ist die Taste , auch diejenige auf dem unteren Zeichen, das der Taste 6 am nächsten liegt. Schließlich befinden sich beide Tasten auf der rechten Seite der Tastatur und erinnern daran, dass diese Redewendungen ein Suffix und kein Präfix für eine Variable sind
Sobald Sie dies ein- oder zweimal visuell bestätigt haben, wird es wahrscheinlich recht gut im Speicher bleiben und Sie werden in der Lage sein, diese Redewendungen in Ihrem nächsten Bash-Skript oder Einzeiler zu verwenden, ohne die Syntax erneut referenzieren zu müssen.
Beispiel 3: Ändern bestimmter Buchstaben
Wir können auch einen bestimmten Buchstaben in Großbuchstaben schreiben:
VAR='ababab cdcdcd'; echo "${VAR^^b}"
aBaBaB cdcdcd
Oder in Kleinbuchstaben:
VAR='ABABAB CDCDCD'; echo "${VAR,,C}"
ABABAB cDcDcD
Hier gibt es zwei Fallstricke/Einschränkungen. Zunächst müssen wir sicherstellen, dass wir zunächst die richtige Groß- und Kleinschreibung des Buchstabens angeben. Daher funktioniert die Angabe einer Kleinbuchstabenersetzung für den Buchstaben c nicht:
VAR='ABABAB CDCDCD'; echo "${VAR,,c}"
ABABAB CDCDCD
Da es einfach kein kleines c im Text gibt, gibt es nur C (Großbuchstaben), und das funktioniert gut wie im obigen Beispiel.
Wir können auch nicht mehrere Buchstaben angeben, indem wir eines der folgenden vermutlichen, aber nicht funktionierenden Formate verwenden:
VAR='ABABAB CDCDCD'; echo "${VAR,,CD}"
ABABAB CDCDCD
VAR='ABABAB CDCDCD'; echo "${VAR,,C,,D}"
ABABAB CDCDCD
Der Weg, um dies korrekt zum Laufen zu bringen, besteht darin, das reguläre Ausdrucksformat von [... Auswahlliste...], wie folgt:
VAR='ABABAB CDCDCD'; echo "${VAR,,[CD]}"
ABABAB cdcdcd
Den Satz mit einem Groß- oder Kleinbuchstaben beginnen
Es ist auch möglich, nur den ersten Buchstaben zu ändern:
VAR='ababab cdcdcd'; echo "${VAR^}"
Ababab cdcdcd
VAR='ABABAB CDCDCD'; echo "${VAR,}"
aBABAB CDCDCD
Hier haben wir ein einzelnes ^ oder verwendet, um den ersten Buchstaben in Groß- oder Kleinbuchstaben zu schreiben.
Verwenden dieser Bash-Variablensuffix-Idiome aus if-Anweisungen
Wir können diese Bash-Variablensuffix-Idiome auch direkt aus if-Anweisungen heraus verwenden:
VAR='abc'; if [ "${VAR^^}" == "ABC" ]; then echo 'Matched!'; else echo 'Not Matched!'; fi
Matched!
Hier haben wir eine Variable VAR mit dem Wert abc. Als nächstes ändern wir innerhalb der if-Anweisung den Inhalt der Variablen dynamisch in ABC, indem wir $ {VAR^^} als erste Vergleichszeichenfolge in der if-Anweisung verwenden. Als Nächstes vergleichen wir mit ABC und haben eine Übereinstimmung, die beweist, dass unsere Inline-Ersetzung durch Großbuchstaben funktioniert hat.
Dies ist viel einfacher, als eine Subshell zu starten und dasselbe mit sed und einem regulären Ausdruck zu tun:
VAR='abc'; if [ "$(echo "${VAR}" | sed 's|[a-z]|\U&|g')" == "ABC" ]; then echo 'Matched!'; else echo 'Not Matched!'; fi
Matched!
Das \U& in dieser sed-Anweisung kann gelesen werden als: 'ändere jede Erfassung (erfolgt durch [a-z] und Verweise durch & in \U&) auf das Äquivalent dazu in Großbuchstaben (\U'). Vergleichen Sie die Komplexität dieser Lösung mit der vorherigen.
Ein weiteres Beispiel, wenn
VAR='abc'; if [[ "${VAR^^b}" == *"B"* ]]; then echo 'Matched!'; else echo 'Not Matched!'; fi
Matched!
In diesem Beispiel haben wir den Text abc in aBc geändert, indem wir $ {VAR^^b} verwendet haben, wie zuvor beschrieben (nur der Buchstabe b in Großbuchstaben). Dann verwenden wir einen Vergleich, der links und rechts vom Buchstaben B ein Sternchen hat. Das heißt, wir suchen ... jede Zeichenfolge... gefolgt von B gefolgt von ... jede Zeichenfolge... (Beachten Sie, dass man auch das Anfangs- oder Endsternchen weglassen kann, um Sätze, die mit B beginnen bzw. enden, abzugleichen).
Schlussfolgerung
In diesem Artikel haben wir die Bash-Variablensuffix-Idiome ^, ^^, und ,,untersucht. Wir haben uns angesehen, wie sie verwendet werden können, um Zeichenfolgen durch ihre Groß- und Kleinbuchstaben zu ersetzen, und wie man mit einem oder mehreren einzelnen Buchstaben arbeitet, einschließlich der Groß- oder Kleinschreibung des ersten Buchstaben.
Wir haben auch untersucht, wie diese Redewendungen in den Bash-if-Anweisungen weiter verwendet werden können. Schließlich haben wir einen Trick zur Speicherunterstützung vorgeschlagen, um sich zu merken, welche Zeichen wo als Bash-Redewendungen für die Ersetzung von Text in Groß- und Kleinbuchstaben verwendet werden können.
Hinterlassen Sie uns einen Gedanken mit Ihren coolsten Befehlen zur Ersetzung von Groß- und Kleinschreibung! Genießen!
