このトピックでは、bash シェル スクリプトで文字列を分割する方法を定義しました。
場合によっては、特定のタスクを実行するために文字列データを分割する必要がある場合があります。ほとんどのプログラミング言語には、文字列データを複数の部分に分割するための組み込み関数「split」が含まれています。ただし、bash にはそのような種類の組み込み関数は含まれていません。ただし、区切り文字を使用して、bash スクリプトで文字列データを分割することができます。区切り文字には、単一の文字または複数の文字を含む文字列を使用できます。
bash シェルで文字列を分割する方法を理解するには、以下のメソッドを確認してください。
$IFS 変数を使用して分割する
$IFS を使用して bash で文字列を分割する手順は次のとおりです。
- $IFS は、文字列を単語に分割するために使用される特別な内部変数です。 $IFS 変数は ' と呼ばれます 内部フィールド区切り文字 ' これは Bash が境界を認識する方法を決定します。 $IFS は、特定の区切り文字を割り当てるために使用されます [ IFS='' ] 文字列を分割します。空白は $IFS のデフォルト値です。ただし、「 」、「 」、「-」などの値を区切り文字として使用することもできます。
- 区切り文字を割り当てた後、文字列は '-r' と '-a' の 2 つのオプションで読み取ることができます。つまり、 読み取り -ra ARR <<< '$str' 。
ここでは、オプション「-r」を使用して、バックスラッシュ () がエスケープ文字ではなく文字であることを定義します。 '-a' オプションは、単語 ($IFS で区切られた) がゼロから始まる配列の連続インデックスに割り当てられることを定義するために使用されます。 - 次に、bash の「for」ループを適用して、配列に分割されたトークンにアクセスします。
いくつかの例を使用して、このメカニズムを理解しましょう。
例 1: Bash の文字列をスペースで分割する
この例では、文字列はスペース文字区切り文字を使用して分割されます。
Bash スクリプト
#!/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'>
この bash スクリプトでは、次のパラメータ展開を使用しました。
最も長く一致するサフィックス パターンを削除します。
一致する最短のプレフィックス パターンを削除します。
出力
例 3: Trim コマンドを使用した Bash の分割文字列
この例では、trim (tr) コマンドを使用して文字列を分割しました。 read コマンドを使用する代わりに、trim コマンドを使用して文字列を区切り文字で分割します。
Bash スクリプト
#!/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
出力
注: 文字列を分割するために Trim コマンドを適用する場合、配列要素は「スペース区切り文字」で分割されることに注意してください。たとえば、「Windows OS」のような要素は 2 つの異なる単語として扱われます。
結論
このトピックでは、区切り文字を使用する場合と使用しない場合のさまざまなタイプのシナリオで、bash スクリプトで文字列を分割する方法を示しました。
\'$str\'>\'$entry\'>'$str'>