यदि आपने कभी कोड लिखा है, चाहे वह शेल स्क्रिप्ट हो, पायथन स्क्रिप्ट हो, C++ हो, या स्क्रैच भी हो, तो आप जानते हैं कि वेरिएबल महत्वपूर्ण हैं। कंप्यूटर और कोडर्स वेरिएबल्स का उपयोग वेस्टेशन के रूप में करते हैं, जहां वे गुप्त रूप से जानकारी को आगे और पीछे भेजते हैं। उदाहरण के लिए, यदि आपको किसी उपयोगकर्ता के नाम को शेल स्क्रिप्ट में संसाधित करने की आवश्यकता है, तो आप एक चर सेट कर सकते हैं, उपयोगकर्ता नाम को चर में डाल सकते हैं, और फिर कंप्यूटर को चर के लिए कुछ करने का निर्देश दे सकते हैं (इसे अधिकृत उपयोगकर्ताओं की सूची के विरुद्ध जांचें) , उदाहरण के लिए)। चर महत्वपूर्ण हैं क्योंकि वे गतिशील द्वारा कोड को सक्षम करते हैं:वे जानकारी के लिए प्लेसहोल्डर हैं जो हर बार कोड चलाने पर बदलने की उम्मीद है।
लेकिन चर, क्योंकि वे बहुत आम हैं, बल्कि बोझिल भी हो सकते हैं। अक्सर बार, आप एक कोड प्रोजेक्ट में इतने सारे चर इकट्ठा करते हैं कि उन सभी पर नज़र रखना असंभव है। आप चतुर सम्मेलनों का उपयोग कर सकते हैं, जैसे कि सभी संबंधित चरों को एक सामान्य स्ट्रिंग (user_name, user_pass, user_time, और इसी तरह) के साथ उपसर्ग करना, या आप आसान संदर्भ के लिए कहीं न कहीं उनकी एक मास्टर सूची बना सकते हैं, लेकिन इसका ट्रैक रखने का ओवरहेड सभी कर बन सकते हैं।
इस समस्या का एक उत्तर परंपरागत रूप से सरणियाँ रहा है। ये अधिकांश कोडिंग भाषाओं में अच्छा काम करते हैं, जिसमें बैश जैसी शेल स्क्रिप्टिंग भाषाएं शामिल हैं।
अधिकांश गोले अनुक्रमित सरणियों को बनाने, हेरफेर करने और क्वेरी करने की क्षमता प्रदान करते हैं। सादे अंग्रेजी में, एक अनुक्रमित सरणी एक संख्या के साथ उपसर्ग वाली चीजों की एक सूची है। चीजों की यह सूची, उनकी नियत संख्या के साथ, आसानी से एक ही चर में लपेटी जाती है, जिससे आपके कोड में "कैरी" करना आसान हो जाता है।
हालाँकि, बैश में साहचर्य सरणियाँ बनाने की क्षमता शामिल है, और यह इन सरणियों को किसी अन्य सरणी के समान मानता है। एक सहयोगी सरणी आपको केवल क्रमांकित मानों के बजाय कुंजी और मान जोड़े की सूचियां बनाने देती है।
आप मनमानी कुंजियों को मान निर्दिष्ट कर सकते हैं:
$ declare -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`date --utc +%s`
कोई भी कुंजी पूछें:
$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192
किसी सरणी से आपके द्वारा अपेक्षित अधिकांश सामान्य सरणी संचालन उपलब्ध हैं। उदाहरण के लिए, आप सभी मानों को सूचीबद्ध कर सकते हैं:
$ echo "${userdata[*]}"
8eab07eb620533b083f241ec4e6b9724 seth 1583362192
आप संपूर्ण सरणी देख सकते हैं:
$ typeset -A
declare -A BASH_ALIASES='()'
declare -A BASH_CMDS='()'
declare -A userdata='([pass]="8eab07eb620533b083f241ec4e6b9724"
[name]="seth"
[login]="1583362192" )'
आप अनसेट . का उपयोग करके अपनी सरणी से आइटम भी निकाल सकते हैं आदेश:
$ unset userdata[pass]
$ typeset -A
[...]
declare -A userdata='([name]="seth"
[login]="1583362192" )'
अंत में, आप संपूर्ण सरणी को खारिज कर सकते हैं।
$ unset "userdata[*]"
डेटा के लिए सरणी
संबंधित डेटा को एक साथ संग्रहीत करने के लिए Arrays उपयोगी उपकरण हैं। आप ज्यादातर मामलों में एक सादे पुराने चर का उपयोग कर सकते हैं, लेकिन कभी-कभी डेटा को समेकित और अनुक्रमित रखने के लिए एक सरणी में एकवचन डेटा "ऑब्जेक्ट" की विशेषताओं को संग्रहीत करना अधिक तार्किक होता है। उदाहरण के लिए, यदि आप लॉगिन नाम और utmp . से लिए गए समय को संसाधित कर रहे हैं , यह आपके लिए सहयोगी . के लिए अधिक उपयोगी होगा दो डेटा ऑब्जेक्ट्स को बिना किसी स्पष्ट कनेक्शन के अलग-अलग चर के रूप में संग्रहीत करने के बजाय, उपयोगकर्ता के साथ लॉगिन समय, जिसे समय संदर्भित किया गया था।
इसके अलावा, चर के विपरीत, एक सरणी में एक प्रविष्टि को डेटा संग्रहीत करने से पहले मौजूद होने की आवश्यकता नहीं है। स्टोर करने से पहले आपको यह जानने की जरूरत नहीं है कि कितना डेटा स्टोर होने वाला है। यह एक बड़ा लाभ हो सकता है यदि आप उस डेटा को संसाधित कर रहे हैं जिसे आप नियंत्रित या भविष्यवाणी नहीं कर सकते हैं:यदि आप नहीं जानते कि utmp में कितने उपयोगकर्ताओं की अपेक्षा की जाए एक दिन से अगले दिन, सभी प्रविष्टियों को समाहित करने के लिए एक स्क्रिप्ट बनाना कठिन है। एक सरणी के साथ, हालांकि, आपको केवल एक सरणी घोषित करना है और उसमें डेटा पढ़ना है, एक नई कुंजी और मूल्य जोड़ी बनाना है जब तक कि आपके पास अंतर्ग्रहण करने के लिए डेटा समाप्त न हो जाए।
Arrays शक्तिशाली हैं, और वे बैश से परे प्रोग्रामिंग भाषाओं में आम हैं। उनका उपयोग अभी शुरू करें!