Wenn Sie in der Bash-Shell ein Dollarzeichen gefolgt von einem Variablennamen verwenden, erweitert die Shell die Variable um ihren Wert. Diese Funktion der Shell wird als Parametererweiterung bezeichnet.
Die Parametererweiterung hat jedoch zahlreiche andere Formen, die es Ihnen ermöglichen, einen Parameter zu erweitern und den Wert zu ändern oder andere Werte im Erweiterungsprozess zu ersetzen. Lassen Sie uns in diesem Artikel untersuchen, wie das Parametererweiterungskonzept für Zeichenfolgenmanipulationsoperationen verwendet wird.
Dieser Artikel ist Teil der fortlaufenden Bash-Tutorial-Reihe. Weitere Informationen finden Sie in unserem früheren Artikel über die Erweiterung von bash { }.
1. Identifizieren Sie die Zeichenfolgenlänge innerhalb des Bash-Shell-Skripts
${#string}
Das obige Format wird verwendet, um die Länge der angegebenen Bash-Variablen zu erhalten.
$ cat len.sh #! /bin/bash var="Welcome to the geekstuff" echo ${#var} $ ./len.sh 24
Um mehr über Bash-Variablen zu erfahren, lesen Sie 6 Praktische Bash-Beispiele für globale und lokale Variablen.
2. Extrahieren Sie eine Teilzeichenfolge aus einer Variablen in einem Bash-Shell-Skript
Bash bietet eine Möglichkeit, einen Teilstring aus einem String zu extrahieren. Das folgende Beispiel erläutert, wie n Zeichen ab einer bestimmten Position geparst werden.
${string:position}
Teilstring aus $string an $position
extrahieren${string:position:length}
Extrahieren Sie $Länge der Zeichen-Teilzeichenfolge aus $Zeichenfolge beginnend mit $Position. Im folgenden Beispiel gibt die erste echo-Anweisung die Teilzeichenfolge ab der 15. Position zurück. Die zweite Echo-Anweisung gibt die 4 Zeichen ab der 15. Position zurück. Länge muss die Zahl größer oder gleich Null sein.
$ cat substr.sh #! /bin/bash var="Welcome to the geekstuff" echo ${var:15} echo ${var:15:4} $ ./substr.sh geekstuff geek
Lesen Sie auch unseren früheren Artikel, um mehr über die speziellen Bash-Parameter $*, $@, $#, $$, $!, $?, $-, $_ zu erfahren.
3. Kürzeste Substring-Übereinstimmung
Die folgende Syntax löscht die kürzeste Übereinstimmung von $substring vor $string
${string#substring}
Die folgende Syntax löscht die kürzeste Übereinstimmung von $substring hinter $string
${string%substring}
Das folgende Beispiel-Shell-Skript erklärt die beiden obigen Konzepte für die Übereinstimmung von kürzesten Teilzeichenfolgen.
$ cat shortest.sh #! /bin/bash filename="bash.string.txt" echo ${filename#*.} echo ${filename%.*} $ ./shortest.sh After deletion of shortest match from front: string.txt After deletion of shortest match from back: bash.string
In der ersten echo-Anweisung stimmt die Teilzeichenfolge „*.“ mit den Zeichen und einem Punkt überein, und # entfernt den Anfang der Zeichenfolge, sodass die Teilzeichenfolge „bash“ entfernt wird. aus der Variablen namens Dateiname. In der zweiten Echo-Anweisung stimmt die Teilzeichenfolge „.*“ mit der Teilzeichenfolge überein, die mit einem Punkt beginnt, und % wird vom Ende der Zeichenfolge entfernt, sodass die Teilzeichenfolge „.txt“ gelöscht wird
4. Längste Substring-Übereinstimmung
Die folgende Syntax löscht die längste Übereinstimmung von $substring vor $string
${string##substring}
Die folgende Syntax löscht die längste Übereinstimmung von $substring hinter $string
${string%%substring}
Das folgende Beispiel-Shell-Skript erklärt die beiden obigen Konzepte für die längste Übereinstimmung von Teilzeichenfolgen.
$ cat longest.sh #! /bin/bash filename="bash.string.txt" echo "After deletion of longest match from front:" ${filename##*.} echo "After deletion of longest match from back:" ${filename%%.*} $ ./longest.sh After deletion of longest match from front: txt After deletion of longest match from back: bash
Im obigen Beispiel ##*. Entfernt die längste Übereinstimmung für "*.", die mit "bash.string" übereinstimmt. Nach dem Striping wird die verbleibende TXT-Datei gedruckt. Und %%.* entfernt die längste Übereinstimmung für .* von hinten, die mit „.string.txt“ übereinstimmt, nach dem Striping gibt es „bash“ zurück.
5. Suchen und Ersetzen von Zeichenfolgenwerten im Bash-Shell-Skript
Nur die erste Übereinstimmung ersetzen
${string/pattern/replacement}
Es stimmt mit dem Muster in der Variablen $string überein und ersetzt nur die erste Übereinstimmung des Musters durch die Ersetzung.
$ cat firstmatch.sh #! /bin/bash filename="bash.string.txt" echo "After Replacement:" ${filename/str*./operations.} $ ./firstmatch.sh After Replacement: bash.operations.txt
Ersetze alle Streichhölzer
${string//pattern/replacement}
Es ersetzt alle Übereinstimmungen von Muster durch Ersetzung.
$ cat allmatch.sh #! /bin/bash filename="Path of the bash is /bin/bash" echo "After Replacement:" ${filename//bash/sh} $ ./allmatch.sh After Replacement: Path of the sh is /bin/sh
Wenn es um Suchen und Ersetzen geht, lesen Sie unsere früheren Artikel – sed-Ersatzbeispiele und Vim-Suchen und -Ersetzen.
Anfang und Ende ersetzen
${string/#pattern/replacement}
Die folgende Syntax ersetzt nur dann durch die Ersetzungszeichenfolge, wenn das Muster mit dem Anfang der $zeichenfolge übereinstimmt.
${string/%pattern/replacement}
Die folgende Syntax ersetzt nur dann durch die Ersetzungszeichenfolge, wenn das Muster am Ende der angegebenen $zeichenfolge übereinstimmt.
$ cat posmatch.sh #! /bin/bash filename="/root/admin/monitoring/process.sh" echo "Replaced at the beginning:" ${filename/#\/root/\/tmp} echo "Replaced at the end": ${filename/%.*/.ksh} $ ./posmatch.sh Replaced at the beginning: /tmp/admin/monitoring/process.sh Replaced at the end: /root/admin/monitoring/process.ksh
Empfohlene Lektüre
Bash 101 Hacks, von Ramesh Natarajan . Ich verbringe die meiste Zeit in der Linux-Umgebung. Daher bin ich natürlich ein großer Fan von Bash-Befehlszeilen- und Shell-Skripten. Vor 15 Jahren, als ich an verschiedenen Varianten von *nix arbeitete, habe ich viel Code auf der C-Shell und der Korn-Shell geschrieben. Später, als ich anfing, als Systemadministrator an Linux zu arbeiten, automatisierte ich so ziemlich jede mögliche Aufgabe mit Bash-Shell-Scripting. Basierend auf meiner Bash-Erfahrung habe ich das eBook „Bash 101 Hacks“ geschrieben, das 101 praktische Beispiele sowohl für die Bash-Befehlszeile als auch für Shell-Scripting enthält. Wenn Sie darüber nachgedacht haben, Bash zu beherrschen, tun Sie sich selbst einen Gefallen und lesen Sie dieses Buch, das Ihnen helfen wird, die Kontrolle über Ihre Bash-Befehlszeile und Ihr Shell-Skripting zu übernehmen.