I det här ämnet har vi definierat hur man delar en sträng i bash-skalskript.
I vissa fall kan vi behöva dela strängdata för att utföra vissa specifika uppgifter. De flesta av programmeringsspråken innehåller en inbyggd funktion 'split' för att dela upp strängdata i flera delar. Bash innehåller dock inte en sådan typ av inbyggd funktion. Men vi kan använda avgränsare för att dela upp alla strängdata i bash-skript. Avgränsaren kan vara antingen ett enstaka tecken eller en sträng med flera tecken.
Kolla in metoderna nedan för att förstå hur man delar sträng i ett bashskal:
Dela upp med $IFS-variabel
Följande är stegen för att dela en sträng i bash med $IFS:
- $IFS är en speciell intern variabel som används för att dela upp en sträng i ord. $IFS variabel kallas ' Intern fältseparator ' som avgör hur Bash känner igen gränser. $IFS används för att tilldela den specifika avgränsaren [ IFS='' ] för att dela strängen. Det vita utrymmet är ett standardvärde för $IFS. Men vi kan också använda värden som ' ', ' ', '-' etc. som avgränsare.
- Efter att ha tilldelats avgränsaren kan en sträng läsas med två alternativ: '-r' och '-a'. dvs. läs -ra ARR <<< '$str' .
Här används alternativet '-r' för att definiera att omvänt snedstreck () är ett tecken snarare än escape-tecken. Alternativet '-a' används för att definiera att orden (separerade med $IFS) tilldelas det sekventiella indexet för array som börjar på noll. - Sedan använder vi bash 'for' loop för att komma åt tokens som är uppdelade i en array.
Låt oss förstå denna mekanism med hjälp av några exempel:
Exempel 1: Bash Split String by Space
I det här exemplet delas en sträng med ett mellanslagsteckenavgränsare.
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'>
I det här bash-skriptet har vi använt följande parameter- Expansions:
Det tar bort det längsta matchande suffixmönstret.
Det tar bort det kortaste matchande prefixmönstret.
Produktion
Exempel 3: Bash Split String med Trim Command
I det här exemplet har vi använt trim (tr) kommandot för att dela en sträng. Istället för att använda läskommandot används trimkommandot för att dela en sträng på avgränsaren.
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
Produktion
Notera: Det bör noteras att arrayelement delas på 'mellanslagsavgränsare' om vi använder ett trimkommando för att dela en sträng. Till exempel kommer element som 'Windows OS' att behandlas som två olika ord.
Slutsats
I det här ämnet visade vi hur man delar en sträng i bash-skript med olika typer av scenarier med eller utan att använda avgränsare.
\'$str\'>\'$entry\'>'$str'>