In dit onderwerp hebben we gedefinieerd hoe je een string kunt splitsen in bash-shell-scripts.
In sommige gevallen moeten we de tekenreeksgegevens mogelijk splitsen om bepaalde specifieke taken uit te voeren. De meeste programmeertalen bevatten een ingebouwde functie 'split' om stringgegevens in meerdere delen te verdelen. Bash bevat echter niet zo'n ingebouwde functie. Maar we kunnen scheidingstekens gebruiken om tekenreeksgegevens te splitsen in bash-scripts. Het scheidingsteken kan een enkel teken zijn of een tekenreeks met meerdere tekens.
Bekijk de onderstaande methoden om te begrijpen hoe je een string in een bash-shell kunt splitsen:
Splitsen met behulp van de $IFS-variabele
Hieronder volgen de stappen om een string in bash te splitsen met $IFS:
- $IFS is een speciale interne variabele die wordt gebruikt om een string in woorden te splitsen. $IFS-variabele heet ' Interne veldscheider ' die bepaalt hoe Bash grenzen herkent. $IFS wordt gebruikt om het specifieke scheidingsteken [ IFS='' ] voor het verdelen van de string. De witruimte is een standaardwaarde van $IFS. We kunnen echter ook waarden als ' ', ' ', '-' etc. als scheidingsteken gebruiken.
- Na het toewijzen van het scheidingsteken kan een string op twee manieren worden gelezen: '-r' en '-a'. d.w.z., lees -ra ARR <<< '$str' .
Hier wordt de optie '-r' gebruikt om te definiëren dat backslash () een teken is in plaats van een escape-teken. De optie '-a' wordt gebruikt om te definiëren dat de woorden (gescheiden door $IFS) worden toegewezen aan de sequentiële index van de array beginnend bij nul. - Vervolgens passen we de bash 'for'-lus toe om toegang te krijgen tot de tokens die in een array zijn opgesplitst.
Laten we dit mechanisme begrijpen met behulp van enkele voorbeelden:
Voorbeeld 1: Bash splitst string op spatie
In dit voorbeeld wordt een tekenreeks gesplitst met behulp van een spatietekenscheidingsteken.
Bash-script
#!/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 dit bash-script hebben we de volgende parameteruitbreidingen gebruikt:
Het verwijdert het langste overeenkomende achtervoegselpatroon.
Het verwijdert het kortste overeenkomende voorvoegselpatroon.
Uitvoer
Voorbeeld 3: Bash Split String met behulp van Trim Command
In dit voorbeeld hebben we de opdracht trim (tr) gebruikt om een string te splitsen. In plaats van het leescommando te gebruiken, wordt het trimcommando gebruikt om een tekenreeks op het scheidingsteken te splitsen.
Bash-script
#!/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
Uitvoer
Opmerking: Er moet worden opgemerkt dat array-elementen worden verdeeld via 'space delimiter' als we een trimcommando toepassen om een string te splitsen. Elementen als 'Windows OS' worden bijvoorbeeld als twee verschillende woorden behandeld.
Conclusie
In dit onderwerp hebben we gedemonstreerd hoe je een string kunt splitsen in bash-scripting met verschillende soorten scenario's, met of zonder gebruik van een scheidingsteken.
\'$str\'>\'$entry\'>'$str'>