logo

سلسلة باش سبليت

في هذا الموضوع، قمنا بتعريف كيفية تقسيم سلسلة في البرمجة النصية لـ bash Shell.

في بعض الحالات، قد نحتاج إلى تقسيم بيانات السلسلة لأداء بعض المهام المحددة. تحتوي معظم لغات البرمجة على وظيفة 'تقسيم' مدمجة لتقسيم أي بيانات سلسلة إلى أجزاء متعددة. ومع ذلك، لا يحتوي bash على مثل هذا النوع من الوظائف المضمنة. ولكن يمكننا استخدام المحددات لتقسيم أي بيانات سلسلة في البرمجة النصية bash. يمكن أن يكون المحدد حرفًا واحدًا أو سلسلة تحتوي على عدة أحرف.

تحقق من الطرق أدناه لفهم كيفية تقسيم السلسلة في bash Shell:

تقسيم باستخدام متغير IFS $

فيما يلي خطوات تقسيم سلسلة في bash باستخدام $IFS:

  • $IFS هو متغير داخلي خاص يستخدم لتقسيم السلسلة إلى كلمات. المتغير $IFS يسمى ' فاصل المجال الداخلي الذي يحدد كيفية تعرف Bash على الحدود. يتم استخدام $IFS لتعيين المحدد المحدد [ آي إف إس='' ] لتقسيم السلسلة. المسافة البيضاء هي القيمة الافتراضية لـ $IFS. ومع ذلك، يمكننا أيضًا استخدام قيم مثل ' '، و' '، و'-' وما إلى ذلك كمحدد.
  • بعد تعيين المحدد، يمكن قراءة السلسلة من خلال خيارين: '-r' و'-a'. أي.، قراءة -ra ARR <<< '$str' .
    هنا، يتم استخدام الخيار '-r' لتعريف أن الشرطة المائلة العكسية () هي حرف وليس حرف هروب. يتم استخدام الخيار '-a' لتحديد أن الكلمات (المفصولة بـ $IFS) مخصصة للفهرس التسلسلي للصفيف الذي يبدأ من الصفر.
  • ثم نطبق حلقة bash 'for' للوصول إلى الرموز المميزة المقسمة إلى مصفوفة.

دعونا نفهم هذه الآلية بمساعدة بعض الأمثلة:

مثال 1: تقسيم سلسلة 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'>

في هذا البرنامج النصي bash، استخدمنا المعلمة التالية - التوسعات:

    ${المعلمة%%كلمة}
    فهو يزيل أطول نمط لاحقة مطابق.${المعلمة#كلمة}
    فهو يزيل أقصر نمط بادئة مطابق.

انتاج |

سلسلة باش سبليت

المثال 3: تقسيم سلسلة Bash باستخدام أمر القطع

في هذا المثال، استخدمنا أمر القطع (tr) لتقسيم سلسلة. بدلاً من استخدام أمر القراءة، يتم استخدام أمر القطع لتقسيم سلسلة على المحدد.

سكريبت باش

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

انتاج |

سلسلة باش سبليت

ملاحظة: تجدر الإشارة إلى أن عناصر المصفوفة مقسمة على 'محدد المسافة' إذا قمنا بتطبيق أمر القطع لتقسيم سلسلة. على سبيل المثال، سيتم التعامل مع عناصر مثل 'نظام التشغيل Windows' على أنها كلمتين مختلفتين.

خاتمة

في هذا الموضوع، أوضحنا كيفية تقسيم سلسلة في البرمجة النصية bash باستخدام أنواع مختلفة من السيناريوهات باستخدام المحدد أو بدونه.