logo

Bash Bölünmüş Dize

Bu konuda, bash kabuk komut dosyası oluşturmada bir dizenin nasıl bölüneceğini tanımladık.

Bazı durumlarda, bazı belirli görevleri gerçekleştirmek için dize verilerini bölmemiz gerekebilir. Programlama dillerinin çoğu, herhangi bir dize verisini birden çok parçaya bölmek için yerleşik 'split' işlevini içerir. Ancak bash bu tür yerleşik işlevler içermez. Ancak bash komut dosyasında herhangi bir dize verisini bölmek için sınırlayıcıları kullanabiliriz. Sınırlayıcı tek bir karakter veya birden fazla karakterden oluşan bir dize olabilir.

Bir bash kabuğunda dizenin nasıl bölüneceğini anlamak için aşağıdaki yöntemlere göz atın:

$IFS değişkenini kullanarak bölme

$IFS kullanarak bash'ta bir dizeyi bölme adımları aşağıda verilmiştir:

  • $IFS, bir dizeyi kelimelere bölmek için kullanılan özel bir dahili değişkendir. $IFS değişkeninin adı ' Dahili Alan Ayırıcı ' Bash'in sınırları nasıl tanıdığını belirler. $IFS, belirli sınırlayıcıyı atamak için kullanılır [ IFS='' ] dizeyi bölmek için. Beyaz boşluk, $IFS'nin varsayılan değeridir. Ancak sınırlayıcı olarak ' ', ' ', '-' vb. değerleri de kullanabiliriz.
  • Sınırlayıcıyı atadıktan sonra bir dize iki seçenekle okunabilir: '-r' ve '-a'. yani, oku -ra ARR <<< '$str' .
    Burada '-r' seçeneği ters eğik çizginin () kaçış karakteri değil, bir karakter olduğunu tanımlamak için kullanılır. '-a' seçeneği, kelimelerin ($IFS ile ayrılmış) sıfırdan başlayan dizinin sıralı indeksine atandığını tanımlamak için kullanılır.
  • Daha sonra bir diziye bölünmüş belirteçlere erişmek için bash 'for' döngüsünü uygularız.

Bu mekanizmayı bazı örneklerin yardımıyla anlayalım:

Örnek 1: Bash Dizeyi Boşluğa Göre Bölme

Bu örnekte, bir dize boşluk karakteri sınırlayıcısı kullanılarak bölünür.

Bash Komut Dosyası

 #!/bin/bash #Example for bash split string by space read -p &apos;Enter any string separated by space: &apos; str #reading string value IFS=&apos;&apos; #setting space as delimiter read -ra ADDR &lt;&lt;<'$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 &apos;We welcome you on Javatpoint&apos;, 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 &apos;Enter Name, State and Age separated by a comma: &apos; entry #reading string value IFS=&apos;,&apos; #setting comma as delimiter read -a strarr &lt;&lt;<'$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 &apos;readarray&apos; 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&apos;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 &apos;Enter any string separated by colon(:) &apos; str #reading string value readarray -d : -t strarr &lt;&lt;<'$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=&apos;WeLearnWelcomeLearnYouLearnOnLearnJavatpoint&apos; delimiter=Learn s=$str$delimiter array=(); while [[ $s ]]; do array+=( &apos;${s%%&apos;$delimiter&apos;*}&apos; ); s=${s#*&apos;$delimiter&apos;}; 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=&apos;We;welcome;you;on;javatpoint.&apos; my_arr=($(echo $my_str | tr &apos;;&apos;&apos;
&apos;)) for i in &apos;${my_arr[@]}&apos; 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 &apos;space delimiter&apos; if we apply a trim command to split a string. For example, elements like &apos;Windows OS&apos; 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'>

Bu bash betiğinde aşağıdaki Parametre Genişletmelerini kullandık:

    ${parametre%%word}
    Eşleşen en uzun son ek modelini kaldırır.${parametre#kelime}
    Eşleşen en kısa önek modelini kaldırır.

Çıktı

Bash Bölünmüş Dize

Örnek 3: Trim Komutunu Kullanarak Bash Bölme Dizesi

Bu örnekte bir stringi bölmek için trim (tr) komutunu kullandık. Sınırlayıcıdaki bir dizeyi bölmek için okuma komutunu kullanmak yerine trim komutu kullanılır.

Bash Komut Dosyası

 #!/bin/bash #Example to split a string using trim (tr) command my_str=&apos;We;welcome;you;on;javatpoint.&apos; my_arr=($(echo $my_str | tr &apos;;&apos;&apos;
&apos;)) for i in &apos;${my_arr[@]}&apos; do echo $i done 

Çıktı

Bash Bölünmüş Dize

Not: Bir dizeyi bölmek için trim komutunu uygularsak, dizi öğelerinin 'boşluk sınırlayıcıya' göre bölündüğüne dikkat edilmelidir. Örneğin, 'Windows işletim sistemi' gibi öğeler iki farklı kelime olarak ele alınacaktır.

Çözüm

Bu konuda, bash betiğinde bir dizenin sınırlayıcı kullanarak veya sınırlayıcı kullanmadan farklı senaryo türleriyle nasıl bölüneceğini gösterdik.