آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

آموزش‌های خط فرمانی

این وبلاگ تلاش می‌کند گامی در حد بضاعت در جهت آموزش خط فرمان و اسکریپت‌نویسی پوسته گنو-لینوکس بردارد.

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

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


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

تا همین اواخر، 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‎ به کار برود، آن دیگری کار نمی‌کند.


پایان فصل ششم


نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد