V tej temi smo definirali, kako razdeliti niz v skriptni lupini bash.
V nekaterih primerih bomo morda morali razdeliti podatke niza, da bomo lahko izvedli nekatere posebne naloge. Večina programskih jezikov vsebuje vgrajeno funkcijo 'split' za razdelitev podatkov niza na več delov. Vendar pa bash ne vsebuje takšne vrste vgrajene funkcije. Lahko pa uporabimo ločila, da razdelimo poljubne podatke niza v skriptu bash. Ločilo je lahko en sam znak ali niz z več znaki.
Oglejte si spodnje metode, če želite razumeti, kako razdeliti niz v lupini bash:
Razdeli z uporabo spremenljivke $IFS
Sledijo koraki za razdelitev niza v bash z $IFS:
- $IFS je posebna notranja spremenljivka, ki se uporablja za razdelitev niza na besede. $IFS spremenljivka se imenuje ' Notranji ločilnik polj ', ki določa, kako Bash prepozna meje. $IFS se uporablja za dodelitev posebnega ločila [ IFS='' ] za razdelitev niza. Prazen prostor je privzeta vrednost $IFS. Vendar pa lahko kot ločilo uporabimo tudi vrednosti, kot so ' ', ' ', '-' itd.
- Po dodelitvi ločila lahko niz beremo z dvema možnostma: '-r' in '-a'. tj. branje -ra ARR <<< '$str' .
Tukaj je možnost '-r' uporabljena za določitev, da je poševnica nazaj () znak in ne ubežni znak. Možnost '-a' se uporablja za določitev, da so besede (ločene z $IFS) dodeljene zaporednemu indeksu matrike, ki se začne pri nič. - Nato uporabimo zanko bash 'for' za dostop do žetonov, ki so razdeljeni v matriko.
Razumejmo ta mehanizem s pomočjo nekaj primerov:
Primer 1: Bash razdeli niz s presledkom
V tem primeru je niz razdeljen z uporabo ločila presledka.
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'>
V tem skriptu bash smo uporabili naslednje razširitve parametrov:
Odstrani najdaljši ujemajoči se vzorec pripone.
Odstrani najkrajši ujemajoči se vzorec predpone.
Izhod
Primer 3: Bash Split String z ukazom Trim
V tem primeru smo za razdelitev niza uporabili ukaz trim (tr). Namesto ukaza za branje se za razdelitev niza na ločilo uporabi ukaz trim.
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
Izhod
Opomba: Upoštevati je treba, da so elementi polja razdeljeni na 'ločilnik presledkov', če za razdelitev niza uporabimo ukaz trim. Na primer, elementi, kot je 'Windows OS', bodo obravnavani kot dve različni besedi.
Zaključek
V tej temi smo pokazali, kako razdeliti niz v skriptu bash z različnimi vrstami scenarijev z ali brez uporabe ločila.
\'$str\'>\'$entry\'>'$str'>