منبع اصلی نوشتار زیر در این لینک قرار دارد

آرایه های انجمنی

ادامه یادداشت قبل


راهنمای آموزشی  BashGuide   مؤلف  Lhunath

آرایه‌های انجمنی

تا همین اواخر، BASH فقط از اعداد( به طور دقیق‌تر، اعداد صحیح مثبت ) می‌توانست برای شاخص آرایه‌ها استفاده کند. به این معنی که نمی‌توانستید یک رشته را با دیگری ترجمه یا ترسیم کنید . این به عنوان یک کمبود احساس می‌شد. اشخاصی به منظور آدرس‌دهی به یک موضوع، سوءمصرف از متغیرهای غیرمستقیم را آغاز کردند .

پس از انتشار BASHنگارش 4، دیگر بهانه‌ای برای استفاده از متغیر غیر مستقیم( یا بدتر از آن، eval) برای این منظور نیست. اکنون شما می‌توانید آرایه‌های انجمنی خوش‌ساخت را به کار ببرید.

برای ایجاد یک آرایه انجمنی، باید آرایه به صورت( declare -A) تعریف شود. این برای هماهنگی با تعریف آرایه‌های استاندارد شاخص گذاری شده است. در اینجا چگونگی انجام آن، آمده است:

   $ declare -A fullNames
   $ fullNames=( ["lhunath"]="Maarten Billemont" ["greycat"]="Greg Wooledge" )
   $ echo "Current user is: $USER.  Full name: ${fullNames[$USER]}."
   Current user is: lhunath.  Full name: Maarten Billemont.

با همان دستور زبانی که برای آرایه‌های شاخص‌دار استفاده می‌شد، می‌توانید تکرار روی کلیدهای آرایه‌های انجمنی را انجام دهید:

    $ for user in "${!fullNames[@]}"
    > do echo "User: $user, full name: ${fullNames[$user]}."; done
    User: lhunath, full name: Maarten Billemont.
    User: greycat, full name: Greg Wooledge.

در اینجا دو مورد یادآوری: اول، ترتیب بازیابی کلیدها از یک آرایه انجمنی، با کاربرد ترکیب دستوری ‎${!array[@]}‎ غیرقابل پیش‌بینی است، و لزوماً به همان ترتیب که شما اعضاء را اختصاص داده‌اید، یا هر نوع ذخیره مرتب دیگر نمی‌باشد.

دوم، وقتی از پارامترها به عنوان کلید آرایه انجمنی استفاده می‌کنید، نمی‌توانید از علامت $ صرف‌نظر کنید. با آرایه‌ها شاخص‌دار معمولی،قسمت [...] در حقیقت یک مفهوم محاسباتی است( در آنجا به راستی، می‌توانید بدون یک علامت‌گذاری صریح ‎$((...))‎ محاسبه انجام دهید(. در یک زمینه محاسباتی، یک نام به هیچ وجه نمی‌تواند عدد معتبری باشد، و بنابراین BASH فرض می‌کند، آن یک پارامتر است که شما می‌خواهید از محتوای آن استفاده کنید. این مورد در آرایه‌های انجمنی صدق نمی‌کند، چون در اینجا یک نام نیز به خوبی می‌تواند یک کلید معتبر آرایه انجمنی باشد.

اجازه دهید با مثال تشریح کنیم:

    $ indexedArray=( "one" "two" )
    $ declare -A associativeArray=( ["foo"]="bar" ["alpha"]="omega" )
    $ index=0 key="foo"
    $ echo "${indexedArray[$index]}"
    one
    $ echo "${indexedArray[index]}"
    one
    $ echo "${indexedArray[index + 1]}"
    two
    $ echo "${associativeArray[$key]}"
    bar
    $ echo "${associativeArray[key]}"
    $
    $ echo "${associativeArray[key + 1]}"
    $

به طوری که می‌توانید ملاحظه کنید، هم ‎ $index‎ و هم index به خوبی با آرایه‌های معمولی کار می‌کنند. هر دو، عدد 0 ارزیابی می‌شوند. حتی می‌توانید برای اضافه کردن 1 به آن و به دست آوردن مقدار دوم، با آن محاسبه کنید. آنچه که با آرایه‌های انجمنی نمی‌تواند انجام شود. در اینجا، لازم است ‎$key‎ به کار برود، آن دیگری کار نمی‌کند.


پایان فصل ششم




به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد