صفائف باش

هذه ترجمة لميتش فرايزر " Bash Arrays " من موقع linuxjournal.com.



إذا كنت تستخدم صدفة NIX "القياسية" * ، فقد لا تكون على دراية بميزة bash المفيدة للمصفوفات. في حين أن المصفوفات في bash ليست رائعة كما هي في لغات P (Perl و Python و PHP) ولغات البرمجة الأخرى ، إلا أنها غالبًا ما تكون مفيدة.

تحتوي مصفوفات Bash على مؤشرات رقمية فقط ، لكنها اختيارية ، مما يعني أنك لست مضطرًا إلى تحديد قيم جميع المؤشرات بشكل صريح. يمكن تعريف مصفوفة كاملة بإحاطة المدخلات بأقواس:



  arr=(Hello World)


يمكن تعريف السجلات الفردية باستخدام الصيغة المألوفة (من BASIC (Dijkstra Forgive me - ملاحظة المترجم) إلى Fortran):



  arr[0]=Hello
  arr[1]=World




ومع ذلك ، فإن العكس يبدو أكثر بشاعة نسبيا. إذا كنت بحاجة للإشارة إلى إدخال معين ، فحينئذٍ:



  echo ${arr[0]} ${arr[1]}


من صفحة الدليل:



" هناك حاجة إلى الأقواس المتعرجة لمنع التعارضات عند توسيع المسارات الكاملة للملفات. "



بالإضافة إلى ذلك ، تتوفر التركيبات الغريبة التالية:



  ${arr[*]} #    
  ${!arr[*]}#    
  ${#arr[*]}#    
  ${#arr[0]}#    (  )


$ {! arr [*]} إضافة جديدة نسبيًا إلى bash وليست جزءًا من التطبيق الأصلي. يوضح البناء التالي مثالاً على الاستخدام البسيط للمصفوفة. لاحظ أن "[index] = value" ، وهذا يسمح لك بتعيين قيمة محددة لرقم سجل معين.



#!/bin/bash

array=(one two three four [5]=five)

echo "Array size: ${#array[*]}"  #   

echo "Array items:" #   
for item in ${array[*]}
do
    printf "   %s\n" $item
done

echo "Array indexes:" #   
for index in ${!array[*]}
do
    printf "   %d\n" $index
done

echo "Array items and indexes:" #      
for index in ${!array[*]}
do
    printf "%4d: %s\n" $index ${array[$index]}
done


سيؤدي تشغيل البرنامج النصي إلى إنشاء الإخراج التالي:



حجم الصفيف: 5



عناصر الصفيف:



واحد

اثنان

ثلاثة

أربعة

خمسة



فهارس صفيف:



0

1

2

3

5



عناصر وفهارس الصفيف:



0: واحد

1: اثنان

2: ثلاثة

3: أربعة

5: خمسة



لاحظ ذلك يمكن استخدام الحرف "@" بدلاً من "*" في تركيبات مثل {arr [*]} ، ستكون النتيجة هي نفسها باستثناء توسيع الإدخال المقتبس. سيعرض "$ *" و "$ @" الإدخالات المقتبسة ، وسيعرض "$ {arr [*]}" كل إدخال ككلمة واحدة ، ويعيد "$ {arr [@]}" كل إدخال ككلمات منفصلة.



سيوضح المثال التالي كيف تُرجع علامات الاقتباس والبناء غير المقتبس سلاسل (مهم بشكل خاص عندما تحتوي هذه السلاسل على مسافات):



#!/bin/bash

array=("first item" "second item" "third" "item")

echo "Number of items in original array: ${#array[*]}"
for ix in ${!array[*]}
do
    printf "   %s\n" "${array[$ix]}"
done
echo

arr=(${array[*]})
echo "After unquoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
    printf "   %s\n" "${arr[$ix]}"
done
echo

arr=("${array[*]}")
echo "After * quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
    printf "   %s\n" "${arr[$ix]}"
done
echo

arr=("${array[@]}")
echo "After @ quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
    printf "   %s\n" "${arr[$ix]}"
done


الانتاج عند بدء التشغيل:



عدد العناصر الموجودة في مجموعة الأصلي: 4



البند الأول

البند الثاني

الثالث

البند



بعد التوسع غير المدرجة: 6



الأولى

البند

الثاني

البند

الثالث

البند



بعد التوسع * نقلا عن: 1



البند الأول البند الثاني البند الثالث



بعد @ التوسع نقلت: 4



الأولى البند

الثاني البند

الثالث

البند



All Articles