arrays شبكة - حلقة من خلال مجموعة من السلاسل في باش؟




8 Answers

يمكنك استخدامه على النحو التالي:

## declare an array variable
declare -a arr=("element1" "element2" "element3")

## now loop through the above array
for i in "${arr[@]}"
do
   echo "$i"
   # or do whatever with individual element of the array
done

# You can access them using echo "${arr[0]}", "${arr[1]}" also

يعمل أيضا لإعلان مجموعة متعدد الخطوط

declare -a arr=("element1" 
                "element2" "element3"
                "element4"
                )
غذائية للحيوانات

أريد أن أكتب السيناريو الذي الحلقات من خلال 15 سلاسل (صفيف ربما؟) هل هذا ممكن؟

شيء مثل:

for databaseName in listOfNames
then
  # Do something
end



أي من هذه الإجابات تشمل عداد ...

#!/bin/bash
## declare an array variable
declare -a array=("one" "two" "three")

# get length of an array
arraylength=${#array[@]}

# use for loop to read all values and indexes
for (( i=1; i<${arraylength}+1; i++ ));
do
  echo $i " / " ${arraylength} " : " ${array[$i-1]}
done

انتاج:

1  /  3  :  one
2  /  3  :  two
3  /  3  :  three



يمكنك استخدام بناء الجملة ${arrayName[@]}

#!/bin/bash
# declare an array called files, that contains 3 values
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
for i in "${files[@]}"
do
    echo "$i"
done



قائمة بسيطة

List=(Item1 Item2 Item3 Item4 Item5 Item6)
for Item in ${List[@]} 
do
echo $Item 
done

انتاج:

 Item1
 Item2
 Item3
 Item4
 Item5
 Item6

إذا كان الإدخال يحتوي على مسافة / ثانية ، فستحتاج إلى اقتباسها:

List=(
     Item1 
     Item2
     Item3
     Item4
     Item5
     Item6
     'Item 7 needs to be quoted to preserve spaces'
     )

for Item in "${List[@]}" 
    do
        echo $Item
    done

انتاج :

Item1
Item2
Item3
Item4
Item5
Item6
Item 7 needs to be quoted to preserve spaces

إذا كنت بحاجة لترقيمها:

List=()
for Item in `seq 1 1 16`
    do 
       List+=(Item$Item)
    done
for Item in ${List[*]}
    do 
        echo $Item
    done

وضع خارج هو:

Item1
Item2
Item3
Item4
Item5
Item6
Item7
Item8
Item9
Item10
Item11
Item12
Item13
Item14
Item15
Item16



إذا كنت تستخدم Korn shell ، فهناك " set -A databaseName " ، وإلا هناك " declare -a databaseName "

لكتابة برنامج نصي يعمل على جميع الأصداف ،

 set -A databaseName=("db1" "db2" ....) ||
        declare -a databaseName=("db1" "db2" ....)
# now loop 
for dbname in "${arr[@]}"
do
   echo "$dbname"  # or whatever

done

يجب أن يكون العمل على جميع القذائف.




مجموعة ضمنية للنص البرمجي أو الدالات:

بالإضافة إلى anubhava الصحيحة: إذا كانت البنية الأساسية للحلقة هي:

for var in "${arr[@]}" ;do ...$var... ;done

هناك حالة خاصة في bash :

عند تشغيل برنامج نصي أو دالة ، سيتم تعيين الوسيطات التي تم تمريرها في أسطر الأوامر إلى متغير صفيف [email protected] ، ويمكنك الوصول إلى $1 و $2 و $3 وهكذا.

هذا يمكن ملؤها (للاختبار) بواسطة

set -- arg1 arg2 arg3 ...

يمكن كتابة حلقة فوق هذه المجموعة ببساطة:

for item ;do
    echo "This is item: $item."
  done

لاحظ أن العمل المحجوز in غير موجود ولا اسم مصفوفة أيضًا!

عينة:

set -- arg1 arg2 arg3 ...
for item ;do
    echo "This is item: $item."
  done
This is item: arg1.
This is item: arg2.
This is item: arg3.
This is item: ....

لاحظ أن هذا هو نفسه من

for item in "[email protected]";do
    echo "This is item: $item."
  done

ثم في برنامج نصي :

#!/bin/bash

for item ;do
    printf "Doing something with '%s'.\n" "$item"
  done

احفظ هذا في برنامج نصي myscript.sh ، chmod +x myscript.sh ، ثم

./myscript.sh arg1 arg2 arg3 ...
Doing something with 'arg1'.
Doing something with 'arg2'.
Doing something with 'arg3'.
Doing something with '...'.

نفس في الوظيفة :

myfunc() { for item;do cat <<<"Working about '$item'."; done ; }

ثم

myfunc item1 tiem2 time3
Working about 'item1'.
Working about 'tiem2'.
Working about 'time3'.



السطر الأول المحتمل لكل برنامج نصي / جلسة Bash:

say() { for line in "${@}" ; do printf "%s\n" "${line}" ; done ; }

استخدام على سبيل المثال:

$ aa=( 7 -4 -e ) ; say "${aa[@]}"
7
-4
-e

قد تفكر في: echo يفسر -e كخيار هنا




جرب هذا. انها تعمل واختبارها.

for k in "${array[@]}"
do
    echo $k
done

# For accessing with the echo command: echo ${array[0]}, ${array[1]}



Related

arrays bash shell unix