बैर में एक स्ट्रिंग से "शब्दों" की एक सरणी में जाओ


11

मुझे एक स्ट्रिंग से एक सरणी में जाने की आवश्यकता है जहां प्रत्येक प्रविष्टि उस स्ट्रिंग पर प्रत्येक शब्द है। उदाहरण के लिए, के साथ शुरू:

VotePedro="Vote for Pedro"

मुझे सरणी की आवश्यकता है:

Vote
For
Pedro

जो तब मुझे इस पर चलना चाहिए:

for i in "${votePedroArray[@]}"
    do
    ## Do something
    done

जवाबों:


11
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})

क्या आप बता सकते हैं कि कोष्ठक और कोष्ठक क्या करते हैं? मैं BASH में नया हूं और समझना चाहता हूं कि यह क्यों काम करेगा।
farid99

1
आमतौर पर कोष्ठक का उपयोग करके ऐरे को घोषित किया जाता है। उदाहरण के लिए votePedroArray=("Vote" "For" "Pedro")आपको लंबाई 3. की ​​एक सरणी मिलेगी और इस संदर्भ में भी ऐसा ${VotePedro}ही $VotePedroहै। व्यक्तिगत सरणी तत्वों तक पहुंचने के लिए, आप अपने प्रश्न में लूप के लिए जो कुछ भी था, उसके समान ब्रैकेट का उपयोग कर सकते हैं। उदाहरण ${votePedroArray[0]}सरणी में पहला तत्व है (इस उदाहरण के लिए "वोट")
airfishey

आपके उत्तर के लिए धन्यवाद। मैं उत्थान करूंगा लेकिन अभी तक मेरी कोई प्रतिष्ठा नहीं है।
1999 में farid99

2
और उन पर पुनरावृति करने के लिए: $ {वोटपेड्रोअरे में वोट के लिए [@]}; इको $ वोट करें; किया
नील मैकगिल

4

जब आप एक चर विस्तार को निर्विवाद छोड़ देते हैं, उदाहरण के लिए $VotePedro, निम्न चरण किए जाते हैं:

  1. चर का मान देखें।
  2. व्हॉट्सएप के प्रत्येक ब्लॉक में मूल्य को स्ट्रिंग्स की सूची में विभाजित करें। अधिक सामान्यतः, विभाजक IFSचर के मूल्य में वर्ण होते हैं ; डिफ़ॉल्ट रूप से वह स्थान, टैब और न्यूलाइन है।
  3. वाइल्डकार्ड पैटर्न के रूप में सूची के प्रत्येक तत्व की व्याख्या करें; प्रत्येक तत्व के लिए, यदि पैटर्न कुछ फ़ाइलों से मेल खाता है, तो उस तत्व को मिलान फ़ाइल नामों की सूची से बदल दें।

इस प्रकार आप एक स्ट्रिंग को व्हॉट्सएप-सीमांकित तत्वों (डिफ़ॉल्ट मान मानकर IFS) में विभाजित कर सकते हैं, वाइल्डकार्ड विस्तार को बंद कर सकते हैं और एक चर का विस्तार कर सकते हैं जिसका मूल्य उद्धरण के बाहर स्ट्रिंग है।

VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do 

आप सीधे उपयोग के बिंदु पर विभाजन कर सकते हैं; यह ऐसे गोले के रूप में भी काम करेगा जिसमें sh नहीं है

VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
  set +f
  
done
set +f

0

इसे तोड़ने के अलावा $IFS, आप इसे अपनी पसंद के अनुसार भी तोड़ सकते हैं:

set ''
while case $var in
      (* *) ;; (*)
      ! a=("$var$@")
      esac
do    set '' "${var##* }$@"
      var=${var% "$2"}
done

... जो व्हाट्सएप को अलग-अलग अशक्त क्षेत्रों के लिए अनुमति देगा।

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