unsetएक तत्व निकालता है। यह शेष तत्वों को फिर से नहीं बनाता है।
हम declare -pवास्तव में देखने के लिए उपयोग कर सकते हैं numbers:
$ unset "numbers[i]"
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
numbersअब एक तत्व है निरीक्षण करें 4।
एक और उदाहरण
का निरीक्षण करें:
$ a=()
$ a[1]="element 1"
$ a[22]="element 22"
$ declare -p a
declare -a a=([1]="element 1" [22]="element 22")
ऐरे के aपास 21 के माध्यम से कोई तत्व 2 नहीं है। बैश को सरणी सूचकांकों के लगातार होने की आवश्यकता नहीं है।
सूचकांकों के एक नयाकरण के लिए मजबूर करने के लिए सुझाई गई विधि
आइए numbersअनुपलब्ध तत्व के साथ सरणी से शुरू करें 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
यदि हम चाहते हैं कि सूचकांकों को बदलना है, तो:
$ numbers=("${numbers[@]}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
अब एक तत्व संख्या है 4और इसका मूल्य है 69।
एक कदम में एक तत्व और रेनमर सरणी को हटाने के लिए वैकल्पिक विधि
फिर से, चलो परिभाषित करते हैं numbers:
$ numbers=(53 8 12 9 784 69 8 7 1)
जैसा कि टिप्पणियों में टोबी स्पाइट द्वारा सुझाया गया है , चौथे तत्व को हटाने की एक विधि और शेष तत्वों को एक चरण में सभी को फिर से लिखना है:
$ numbers=("${numbers[@]:0:4}" "${numbers[@]:5}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
जैसा कि आप देख सकते हैं, चौथा तत्व हटा दिया गया था और सभी शेष तत्व फिर से बनाए गए थे।
${numbers[@]:0:4}स्लाइस सरणी numbers: यह तत्व 0 से शुरू होने वाले पहले चार तत्वों को लेता है।
इसी प्रकार, ${numbers[@]:5}स्लाइस ऐरे numbers: इसमें एलिमेंट 5 से शुरू होने वाले और एरे के अंत तक जारी रखने वाले सभी तत्व लगते हैं।
किसी सरणी के सूचकांकों को प्राप्त करना
मान एक सरणी के साथ प्राप्त किया जा सकता ${a[@]}। उन मूल्यों के अनुरूप होने वाले सूचकांकों (या कुंजियों ) को खोजने के लिए उपयोग करें ${!a[@]}।
उदाहरण के लिए, numbersलापता तत्व के साथ फिर से हमारे सरणी पर विचार करें 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
यह देखने के लिए कि कौन से सूचकांक असाइन किए गए हैं:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
फिर, 4सूचकांक की सूची से गायब है।
प्रलेखन
से man bash:
unsetBuiltin सरणियों नष्ट करने के लिए प्रयोग किया जाता है। unset name[subscript]सूचकांक में सरणी तत्व को नष्ट कर देता है subscript। अनुक्रमित सरणियों के लिए नकारात्मक सदस्यता ऊपर वर्णित के रूप में व्याख्या की जाती है। पाथनेम विस्तार के कारण होने वाले अवांछित दुष्प्रभावों से बचने के लिए देखभाल की जानी चाहिए। unset name, जहां nameएक सरणी है, या unset name[subscript], जहां subscriptहै * या @, पूरे सरणी को निकालता है।