logo

String de divisão Bash

Neste tópico, definimos como dividir uma string no script bash shell.

Em alguns casos, poderemos precisar dividir os dados da string para realizar algumas tarefas específicas. A maioria das linguagens de programação contém a função integrada 'split' para dividir quaisquer dados de string em várias partes. No entanto, o bash não contém esse tipo de função integrada. Mas podemos usar delimitadores para dividir quaisquer dados de string em scripts bash. O delimitador pode ser um único caractere ou uma string com vários caracteres.

Confira os métodos abaixo para entender como dividir string em um shell bash:

Dividir usando a variável $IFS

A seguir estão as etapas para dividir uma string no bash usando $IFS:

  • $IFS é uma variável interna especial usada para dividir uma string em palavras. A variável $IFS é chamada ' Separador de Campo Interno ' que determina como o Bash reconhece os limites. $IFS é usado para atribuir o delimitador específico [ SE='' ] para dividir a string. O espaço em branco é um valor padrão de $IFS. No entanto, também podemos usar valores como ' ', ' ', '-' etc.
  • Após atribuir o delimitador, uma string pode ser lida por duas opções: '-r' e '-a'. ou seja, leia -ra ARR <<< '$str' .
    Aqui, a opção '-r' é usada para definir que a barra invertida () é um caractere em vez de um caractere de escape. A opção '-a' é usada para definir que as palavras (separadas por $IFS) sejam atribuídas ao índice sequencial do array começando em zero.
  • Em seguida, aplicamos o loop bash 'for' para acessar os tokens que são divididos em um array.

Vamos entender esse mecanismo com a ajuda de alguns exemplos:

Exemplo 1: Bash Dividir String por Espaço

Neste exemplo, uma string é dividida usando um delimitador de caracteres de espaço.

Script Bash

 #!/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'>

Neste script bash, usamos as seguintes expansões de parâmetros:

    ${parâmetro%%palavra}
    Remove o padrão de sufixo correspondente mais longo.${parâmetro#palavra}
    Remove o padrão de prefixo correspondente mais curto.

Saída

String de divisão Bash

Exemplo 3: Bash Split String usando o comando Trim

Neste exemplo, usamos o comando trim (tr) para dividir uma string. Em vez de usar o comando read, o comando trim é usado para dividir uma string no delimitador.

Script Bash

 #!/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 

Saída

String de divisão Bash

Nota: Deve-se notar que os elementos do array são divididos em 'delimitador de espaço' se aplicarmos um comando trim para dividir uma string. Por exemplo, elementos como 'sistema operacional Windows' serão tratados como duas palavras diferentes.

Conclusão

Neste tópico, demonstramos como dividir uma string em scripts bash com diferentes tipos de cenários com ou sem uso de delimitador.