In diesem Thema haben wir definiert, wie eine Zeichenfolge in der Bash-Shell-Skripterstellung geteilt wird.
In einigen Fällen müssen wir möglicherweise die Zeichenfolgendaten aufteilen, um bestimmte Aufgaben auszuführen. Die meisten Programmiersprachen enthalten die integrierte Funktion „Split“, um beliebige Zeichenfolgendaten in mehrere Teile aufzuteilen. Bash enthält jedoch keine solche integrierte Funktion. Wir können jedoch Trennzeichen verwenden, um beliebige Zeichenfolgendaten in Bash-Skripten aufzuteilen. Das Trennzeichen kann entweder ein einzelnes Zeichen oder eine Zeichenfolge mit mehreren Zeichen sein.
Schauen Sie sich die folgenden Methoden an, um zu verstehen, wie man einen String in einer Bash-Shell aufteilt:
Mit der Variablen $IFS aufteilen
Im Folgenden finden Sie die Schritte zum Teilen einer Zeichenfolge in Bash mithilfe von $IFS:
- $IFS ist eine spezielle interne Variable, die zum Aufteilen einer Zeichenfolge in Wörter verwendet wird. Die $IFS-Variable heißt ' Interner Feldtrenner ', was bestimmt, wie Bash Grenzen erkennt. $IFS wird verwendet, um das spezifische Trennzeichen zuzuweisen [ IFS='' ] zum Teilen der Zeichenfolge. Der Leerraum ist ein Standardwert von $IFS. Wir können jedoch auch Werte wie „ “, „ “, „-“ usw. als Trennzeichen verwenden.
- Nach der Zuweisung des Trennzeichens kann ein String mit zwei Optionen gelesen werden: „-r“ und „-a“. d.h., read -ra ARR <<< '$str' .
Hier wird die Option „-r“ verwendet, um zu definieren, dass der Backslash () ein Zeichen und kein Escape-Zeichen ist. Die Option „-a“ wird verwendet, um zu definieren, dass die Wörter (getrennt durch $IFS) dem sequentiellen Index des Arrays beginnend bei Null zugewiesen werden. - Dann wenden wir die Bash-For-Schleife an, um auf die Token zuzugreifen, die in ein Array aufgeteilt sind.
Lassen Sie uns diesen Mechanismus anhand einiger Beispiele verstehen:
Beispiel 1: Bash-Split-String durch Leerzeichen
In diesem Beispiel wird eine Zeichenfolge mithilfe eines Leerzeichens als Trennzeichen aufgeteilt.
Bash-Skript
#!/bin/bash #Example for bash split string by space read -p 'Enter any string separated by space: ' str #reading string value IFS='' #setting space as delimiter read -ra ADDR <<<'$str' #reading str as an array tokens separated by ifs for i in '${addr[@]}'; #accessing each element of do echo '$i' done < pre> <p> <strong>Output</strong> </p> <p>If we input a string 'We welcome you on Javatpoint', the output will look like this:</p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by Symbol</h3> <p>In some cases, we may have a requirement to split a string by other delimiters such as a symbol or specific character. In this example, a string is split using a comma (,) symbol character as a delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by Symbol (comma) read -p 'Enter Name, State and Age separated by a comma: ' entry #reading string value IFS=',' #setting comma as delimiter read -a strarr <<<'$entry' #reading str as an array tokens separated by ifs echo 'name : ${strarr[0]} ' 'state ${strarr[1]} 'age ${strarr[2]}' < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-2.webp" alt="Bash Split String"> <h2>Split without $IFS variable</h2> <p>In bash, a string can also be divided without using $IFS variable. The 'readarray' command with -d option is used to split the string data. The -d option is applied to define the separator character in the command like $IFS. Moreover, the bash loop is used to print the string in split form.</p> <p>Let's understand this logic with the help of some example:</p> <h3>Example 1: Bash Split String by Symbol</h3> <p>This example defines how a string value can be split without using $IFS. As per the script, a text value should be entered with the colon (:) sign so that it can be split. Check out the bash script below:</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string without $IFS read -p 'Enter any string separated by colon(:) ' str #reading string value readarray -d : -t strarr <<<'$str' #split a string based on the delimiter ':' printf ' ' #print each value of array with help loop for (( n="0;" < ${#strarr[*]}; n++ )) do echo '${strarr[n]}' done pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-3.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by another string</h3> <p>In this example, we have used idiomatic expressions where parameter expansion has completed.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by another string str='WeLearnWelcomeLearnYouLearnOnLearnJavatpoint' delimiter=Learn s=$str$delimiter array=(); while [[ $s ]]; do array+=( '${s%%'$delimiter'*}' ); s=${s#*'$delimiter'}; done; declare -p array </pre> <p>In this bash script, we have used the following Parameter- Expansions:</p> <ul> <tr><td>${parameter%%word}</td> <br> It removes the longest matching suffix pattern. </tr><tr><td>${parameter#word}</td> <br> It removes the shortest matching prefix pattern. </tr></ul> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-4.webp" alt="Bash Split String"> <h3>Example 3: Bash Split String using Trim Command</h3> <p>In this example, we have used trim (tr) command to split a string. Instead of using the read command, the trim command is used to split a string on the delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-5.webp" alt="Bash Split String"> <h4>Note: It should be noted that array elements are divided on 'space delimiter' if we apply a trim command to split a string. For example, elements like 'Windows OS' will be treated as two different words.</h4> <h2>Conclusion</h2> <p>In this topic, we demonstrated how to split a string in bash scripting with different types of scenarios with or without using delimiter.</p> <hr></'$str'></pre></'$entry'></pre></'$str'>
In diesem Bash-Skript haben wir die folgenden Parametererweiterungen verwendet:
Es entfernt das längste passende Suffixmuster.
Es entfernt das kürzeste passende Präfixmuster.
Ausgabe
Beispiel 3: Bash Split String mit Trim Command
In diesem Beispiel haben wir den Befehl trim (tr) verwendet, um eine Zeichenfolge zu teilen. Anstelle des Lesebefehls wird der Trimmbefehl verwendet, um eine Zeichenfolge am Trennzeichen aufzuteilen.
Bash-Skript
#!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done
Ausgabe
Hinweis: Es ist zu beachten, dass Array-Elemente durch „Leerzeichen“ getrennt werden, wenn wir einen Trimmbefehl anwenden, um eine Zeichenfolge zu teilen. Beispielsweise werden Elemente wie „Windows-Betriebssystem“ als zwei verschiedene Wörter behandelt.
Abschluss
In diesem Thema haben wir gezeigt, wie man eine Zeichenfolge in Bash-Skripten mit verschiedenen Szenariotypen mit oder ohne Verwendung von Trennzeichen aufteilt.
\'$str\'>\'$entry\'>'$str'>