arrays - محلولة - كتاب ماتلاب عربي pdf




باش طباعة مجموعة عناصر في خطوط منفصلة (4)

استخدام ل :

for each in "${alpha[@]}"
do
  echo "$each"
done

استخدام التاريخ لاحظ هذا سوف تفشل إذا احتوت القيم الخاصة بك ! :

history -p "${alpha[@]}"

باستخدام الاسم الأساسي ؛ لاحظ أن هذا سيفشل إذا كانت قيمك تحتوي على / :

basename -a "${alpha[@]}"

باستخدام الشوف ؛ لاحظ أن النتائج قد لا تظهر بالترتيب:

shuf -e "${alpha[@]}"

كيف أقوم بطباعة عنصر الصفيف في مصفوفة Bash في سطور منفصلة؟ هذا واحد يعمل ، ولكن بالتأكيد هناك طريقة أفضل:

$ my_array=(one two three)
$ for i in ${my_array[@]}; do echo $i; done
one
two
three

حاول هذا واحد لكنه لم يعمل:

$ IFS=$'\n' echo ${my_array[*]}
one two three

حاول القيام بذلك:

$ printf '%s\n' "${my_array[@]}"

الفرق بين [email protected] و $* :

  • غير مدرجة ، النتائج غير محددة. في Bash ، يتم توسيع كلاهما لفصل args ثم wordsplit و globbed.

  • تسعير "[email protected]" يوسع كل عنصر كوسيطة منفصلة ، بينما يتم توسيع "$*" إلى args المدمجة في وسيطة واحدة: "$1c$2c..." (حيث c هو الحرف الأول لـ IFS ).

أنت تريد دائمًا "[email protected]" . وينطبق نفس الشيء على "${arr[@]}" .

دائما اقتبس منهم!


لقد جربت الإجابات هنا في عملاق ... إذا كانت حلقة ، لكن لم أحصل على أي فرح - لذا فعلت ذلك مثل هذا ، ربما فوضوي ، لكن الوظيفة:

 # EXP_LIST2 is iterated    
 # imagine a for loop
     EXP_LIST="List item"    
     EXP_LIST2="$EXP_LIST2 \n $EXP_LIST"
 done 
 echo -e $EXP_LIST2

على الرغم من أن ذلك أضاف مساحة إلى القائمة ، وهو أمر جيد - أردت أن يتم تحديد مسافة بادئة لها قليلاً. وافترض أيضًا أنه يمكن طباعة \ "n \" باللغة الأصلية $ EP_LIST.


هناك متغير آخر مفيد هو:

echo ${my_array[@]} | tr " " "\n"

هذا يبدو بسيطا وصغير الحجم





bash