में सूचकांक निर्दिष्ट किए बिना एक सरणी के लिए एक नया तत्व जोड़ें वहाँ बैश में PHPs $array[] = 'foo';
की तरह कुछ कर रही बनाम करने के लिए एक रास्ता है:बैश
array[0] = 'foo'
array[1] = 'bar'
में सूचकांक निर्दिष्ट किए बिना एक सरणी के लिए एक नया तत्व जोड़ें वहाँ बैश में PHPs $array[] = 'foo';
की तरह कुछ कर रही बनाम करने के लिए एक रास्ता है:बैश
array[0] = 'foo'
array[1] = 'bar'
हाँ है:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
संदर्भ में जहां एक असाइनमेंट स्टेटमेंट एक शैल चर या सरणी अनुक्रमणिका के लिए मान निर्दिष्ट कर रहा है (देखें Ar किरणें), '+ =' ऑपरेटर का उपयोग चर के पिछले मान में जोड़ने या जोड़ने के लिए किया जा सकता है।
यदि आपका सरणी हमेशा अनुक्रमिक है और 0 पर शुरू होता है, तो आप ऐसा कर सकते हैं:
array[${#array[@]}] = 'foo'
${#array_name[@]}
सरणी
हां, आप कर सकते हैं, लेकिन '+ =' वाक्यविन्यास (देखें @ ई-टी 172 का उत्तर) (ए) सरल है, और (बी) उन सरणी के साथ भी काम करता है जो गैर-संगत हैं और/या 0 से शुरू नहीं होते हैं। – mklement0
ईमानदारी से यह समाधान (मेरे लिए) "+ =" से बेहतर काम कर रहा है, क्योंकि बाद वाले के साथ लंबाई कभी-कभी गलत होती है (एक तत्व जोड़ते समय दो से बढ़ जाती है) ... इसलिए मैं यह जवाब पसंद करता हूं! :) –
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
बैश संस्करणों के लिए अच्छा है जो ई-टी 172 – akostadinov
द्वारा एक अच्छा पिछड़ा-संगत समाधान द्वारा समझाया गया + = ऑपरेटर के अर्थशास्त्र का समर्थन नहीं करता है, लेकिन सावधान रहें कि यदि मौजूदा तत्वों में से कोई भी उनमें रिक्त स्थान है, तो उन्हें एकाधिक में विभाजित किया जाएगा तत्वों; 'arr = ("$ {arr [@]}" "नया") का उपयोग करें, यदि आपके पास – kbolino
में रिक्त स्थान वाले तत्व हैं, तो इसका उपयोग सरणी के सामने धक्का देने के लिए भी किया जा सकता है, जो कि मुझे चाहिए। –
की लंबाई हो जाता है बेवकूफ लड़का बताते हैं, यह ध्यान रखना महत्वपूर्ण है कि सरणी शून्य से शुरू होती है और अनुक्रमिक है। चूंकि आप गैर-संगत सूचकांक को असाइनमेंट और अनसेट कर सकते हैं ${#array[@]}
हमेशा सरणी के अंत में अगला आइटम नहीं है।
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
दिखाता है कि कैसे एक सरणी के अंतिम तत्व प्राप्त करने के लिए:
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
यहाँ कैसे पिछले सूचकांक प्राप्त करने के लिए है। आप अक्सर यह देखेंगे:
$ echo ${array[${#array[@]} - 1]}
g
आप देख सकते हैं, क्योंकि हम एक विरल सरणी के साथ काम कर रहे हैं, यह पिछले तत्व नहीं है। यह दोनों विरल और सन्निहित सरणियों पर काम करता है, हालांकि: एक अनुक्रमित सरणी के साथ
$ echo ${array[@]: -1}
i
ग्रेट सामान; कभी नहीं पता था कि सरणी-निष्कर्षण वाक्यविन्यास भी सरणी पर लागू किया जा सकता है; परीक्षण, त्रुटि और त्रुटि द्वारा निर्धारित नियम हैं (बैश 3.2.48): '$ {सरणी [@]: शुरू करें [: गिनती]}' गिनती गिनती देता है। या, यदि निर्दिष्ट नहीं है, तो सभी _remaining_ elems। निम्नलिखित elem से शुरू: - अगर शुरू> = 0: elem से। जिसका सूचकांक> = शुरू होता है। - अगर शुरू होता है <0: elem से। जिसका सूचकांक है (अंतिम सरणी सूचकांक + 1) - abs (प्रारंभ); CAVEAT: यदि abs (प्रारंभ)> (अंतिम सरणी अनुक्रमणिका + 1), एक शून्य स्ट्रिंग वापस कर दी जाती है। यदि गिनती निर्दिष्ट है, तो कई तत्व लौटाए जाते हैं, भले ही उनके सूचकांक प्रारंभ से जुड़े न हों। – mklement0
@ मिक्लेमेंट: बैश 4.2 में, आप सरणी के अंत से गिनती तत्वों तक पहुंचने के लिए नकारात्मक सरणी सबस्क्रिप्ट का उपयोग कर सकते हैं। '$ {सरणी [-1]}' –
यह जानना अच्छा है, धन्यवाद। ओएस एक्स (10.8.2 के रूप में) अभी भी 3.2.48 का उपयोग करता है, और http://stackoverflow.com/questions/10418616/does-darwin-macos-modify-bash मुझे बताता है कि, दुर्भाग्य से, "ऐप्पल काफी पुराने संस्करण का उपयोग करता है बैश के रूप में, क्योंकि वे जीपीएल 3 के तहत लाइसेंस प्राप्त कोड नहीं भेजते हैं। " – mklement0
, तो आप इस तरह कुछ करने कर सकते हैं:
declare -a a=()
a+=('foo' 'bar')
यह बैश 3.2.48 (ओएस एक्स 10.8 के साथ ठीक काम करता है। 2)। ध्यान दें कि 'ARRAY' वास्तविक चर नाम के लिए केवल प्लेसहोल्डर है। यहां तक कि यदि आपके सरणी इंडेक्स _not_ अनुक्रमिक हैं, तो '+ =' के साथ संलग्न करने से बस उच्चतम अनुक्रमणिका + 1. – mklement0
को असाइन किया जाएगा क्या बैश संस्करण 4.2.24 (1) में ऐसा कुछ है? –
यह ध्यान रखना महत्वपूर्ण है कि ARRAY + = ('foo') ARRAY + = 'foo' से अलग तरीका है, जो स्ट्रिंग 'foo' को निम्नतम (?) कुंजी के साथ प्रविष्टि में जोड़ता है। – TheConstructor