किसी सरणी में एक लूप में, सरणी में एक तत्व जोड़ें


9

मुझे बैश में लूप की समस्या है। उदाहरण के लिए: मेरे पास एक सरणी है ("etc" "bin" "var")। और मैं इस सरणी पर पुनरावृति करता हूं। लेकिन पाश में मैं सरणी के लिए कुछ मूल्य जोड़ना चाहूंगा। उदाहरण के लिए

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

यह प्रदर्शित करता है etc bin var(बेशक अलग-अलग लाइनों पर)। और अगर मैं उसके बाद भी अपेंड करता हूं do:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

मैं चाहता हूं: etc bin var sbin(बेशक अलग लाइनों पर)।

ये काम नहीं कर रहा है। मैं यह कैसे कर सकता हूं?


1
जिस चीज़ पर आप ध्यान दे रहे हैं उसे बदलना हमेशा एक जोखिम भरा प्रस्ताव होता है। यह अक्सर वापस कदम रखने और विचार करने का एक अच्छा समय है कि क्या एक और दृष्टिकोण है जो समझ में आ सकता है
एरिक रेनॉफ

जवाबों:


6

यह होगा "sbin" एकदम सही ढंग से 3 बार संलग्न है, लेकिन यह पुनरावृति से अधिक नए जोड़े "sbin" एक ही पाश में है नहीं होगा।

2 उदाहरण के बाद:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

हाँ, यह सही है, लेकिन मुझे उसी लूप में जोड़ना होगा :)
damekr

forफिर दो छोरों का उपयोग करें । पहले अपने परिवर्धन को सुधारें, फिर परिणाम पर लूप करें।
PSkocik

1
मैं नहीं देखता कि आप लूप में साइबिन क्यों जोड़ना चाहते हैं। इसे सिर्फ एक बार लागू करने से अधिक समझ में आता है:array+=(sbin); for i in ...
PSkocik

लूप के लिए becouse मुझे यह देखना होगा कि क्या कुछ फाइल जो लूप के लिए इसके द्वारा कॉपी की जा रही है,
उसमें

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

यह आपकी सूची पर पुनरावृत्त करेगा, sbinसशर्त रूप से उक्त सूची के अंत से sbinनिपटेगा , और पुनरावृत्त सामग्री में शामिल करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.