In questo argomento, abbiamo definito come dividere una stringa nello scripting della shell bash.
In alcuni casi, potrebbe essere necessario dividere i dati della stringa per eseguire alcune attività specifiche. La maggior parte dei linguaggi di programmazione contiene la funzione incorporata 'split' per dividere qualsiasi stringa di dati in più parti. Tuttavia, bash non contiene questo tipo di funzione incorporata. Ma possiamo usare i delimitatori per dividere qualsiasi dato di stringa nello scripting bash. Il delimitatore può essere un singolo carattere o una stringa con più caratteri.
Dai un'occhiata ai metodi seguenti per capire come dividere la stringa in una shell bash:
Dividi utilizzando la variabile $IFS
Di seguito sono riportati i passaggi per dividere una stringa in bash utilizzando $IFS:
- $IFS è una variabile interna speciale che viene utilizzata per dividere una stringa in parole. La variabile $IFS si chiama ' Separatore di campo interno ' che determina il modo in cui Bash riconosce i confini. $IFS viene utilizzato per assegnare il delimitatore specifico [ SE='' ] per dividere la stringa. Lo spazio bianco è un valore predefinito di $IFS. Tuttavia, possiamo anche utilizzare valori come ' ', ' ', '-' ecc. come delimitatore.
- Dopo aver assegnato il delimitatore, una stringa può essere letta con due opzioni: '-r' e '-a'. cioè., leggi -ra ARR <<< '$str' .
Qui, l'opzione '-r' viene utilizzata per definire che la barra rovesciata () è un carattere anziché un carattere di escape. L'opzione '-a' viene utilizzata per definire che le parole (separate da $IFS) siano assegnate all'indice sequenziale dell'array che inizia da zero. - Quindi applichiamo il ciclo bash 'for' per accedere ai token suddivisi in un array.
Capiamo questo meccanismo con l'aiuto di alcuni esempi:
Esempio 1: stringa divisa Bash per spazio
In questo esempio, una stringa viene divisa utilizzando un delimitatore di caratteri spazio.
BashScript
#!/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 questo script bash, abbiamo utilizzato le seguenti espansioni dei parametri:
Rimuove il modello di suffisso corrispondente più lungo.
Rimuove il modello di prefisso corrispondente più breve.
Produzione
Esempio 3: stringa divisa Bash utilizzando il comando Trim
In questo esempio, abbiamo utilizzato il comando trim (tr) per dividere una stringa. Invece di utilizzare il comando read, il comando trim viene utilizzato per dividere una stringa sul delimitatore.
BashScript
#!/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
Produzione
Nota: va notato che gli elementi dell'array vengono divisi sul 'delimitatore di spazio' se applichiamo un comando di taglio per dividere una stringa. Ad esempio, elementi come 'sistema operativo Windows' verranno trattati come due parole diverse.
Conclusione
In questo argomento, abbiamo dimostrato come dividere una stringa nello scripting bash con diversi tipi di scenari con o senza l'utilizzo del delimitatore.
\'$str\'>\'$entry\'>'$str'>