में एक सरणी अनुक्रमणिका को असाइन करने में बाश परेशानी मैं इसे ksh में काम करने के लिए प्राप्त कर सकता हूं लेकिन बैश में नहीं जो वास्तव में मुझे पागल कर रहा है। उम्मीद है कि यह कुछ स्पष्ट है कि मैं देख रहा हूं।एक लूप
मुझे बाहरी कमांड चलाने की आवश्यकता है जहां आउटपुट की प्रत्येक पंक्ति सरणी अनुक्रमणिका में संग्रहीत की जाएगी।
यह सरलीकृत उदाहरण ऐसा लगता है कि यह लूप में सरणी को सही ढंग से सेट कर रहा है, हालांकि लूप ने उन सरणी असाइनमेंट को पूरा कर लिया है? ऐसा लगता है कि लूप को पूरी तरह से बाहरी खोल के रूप में माना जाता है?
junk.txt
this is a
test to see
if this works ok
testa.sh
#!/bin/bash
declare -i i=0
declare -a array
echo "Simple Test:"
array[0]="hello"
echo "array[0] = ${array[0]}"
echo -e "\nLoop through junk.txt:"
cat junk.txt | while read line
do
array[i]="$line"
echo "array[$i] = ${array[i]}"
let i++
done
echo -e "\nResults:"
echo " array[0] = ${array[0]}"
echo " Total in array = ${#array[*]}"
echo "The whole array:"
echo ${array[@]}
आउटपुट
Simple Test:
array[0] = hello
Loop through junk.txt:
array[0] = this is a
array[1] = test to see
array[2] = if this works ok
Results:
array[0] = hello
Total in array = 1
The whole array:
hello
इसलिए जब पाश में, हम सरणी [i] आवंटित और गूंज यह सत्यापित करता है। लेकिन लूप के बाद मैं सरणी [0] पर वापस आ गया हूं जिसमें कोई अन्य तत्व नहीं है "हैलो"।
बैश 3, 4 और विभिन्न प्लेटफॉर्म पर समान परिणाम।
"मुझे बाहरी कमांड चलाने की आवश्यकता है जहां आउटपुट की प्रत्येक पंक्ति सरणी अनुक्रमणिका में संग्रहीत की जाएगी।" "बिल्ली" एक सरलीकृत उदाहरण था। मुझे एक कमांड चलाने और लूप में आउटपुट प्राप्त करने और
user1596414
कुछ विकल्पों के साथ अपडेट किया गया। आखिरी वाला (यदि आपका बैश का संस्करण पर्याप्त नया है) शायद वह वही है जिसे आप चाहते हैं। – chepner
एक अस्थायी फ़ाइल +1 या बैश 4.2 (या बाद में) विकल्प काम करते हैं। सफेद रिक्त स्थान को संभालने के लिए आईएफएस का उपयोग करने वाला एक तीसरा विकल्प है और आउटपुट के माध्यम से पुन: प्रयास करने की आवश्यकता होने पर सरल सरणी असाइन के साथ जोड़ा जा सकता है। – user1596414