آرایههای انجمنی
تا همین اواخر، BASH فقط از اعداد( به طور دقیقتر، اعداد صحیح مثبت ) میتوانست برای شاخص آرایهها استفاده کند. به این معنی که نمیتوانستید یک رشته را با دیگری ترجمه یا ترسیم کنید . این به عنوان یک کمبود احساس میشد. اشخاصی به منظور آدرسدهی به یک موضوع، سوءمصرف از متغیرهای غیرمستقیم را آغاز کردند .
پس از انتشار BASHنگارش 4، دیگر بهانهای برای استفاده از متغیر غیر مستقیم( یا بدتر از آن، eval) برای این منظور نیست. اکنون شما میتوانید آرایههای انجمنی خوشساخت را به کار ببرید.
برای ایجاد یک آرایه انجمنی، باید آرایه به صورت( declare
$ 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.
در اینجا دو مورد یادآوری: اول، ترتیب بازیابی کلیدها از یک آرایه انجمنی، با کاربرد ترکیب دستوری
دوم، وقتی از پارامترها به عنوان کلید آرایه انجمنی استفاده میکنید، نمیتوانید از علامت
اجازه دهید با مثال تشریح کنیم:
$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]} " $
به طوری که میتوانید ملاحظه کنید، هم