दिलचस्प पोस्ट
रेल / उदारीकरण मॉड्यूल और जावा जार फ़ाइल: संसाधन त्रुटियों का उपयोग करें: यूआरआई क्रमबद्ध नहीं है जब तक कि कई नेटवर्किंग अनुरोधों को पूरा नहीं किया गया है, तब तक प्रतीक्षा करें – इन्हें पूरा करने वाले ब्लॉकों सहित मैं स्टैकट्र्रेस या प्रतिबिंब का उपयोग करके किसी विधि का कॉलर कैसे प्राप्त करूं? SQL सर्वर: सभी अपर केस को उचित केस / शीर्षक केस में बनायें "लिटिल स्कीमर" में वाई संयोजक की चर्चा डेटाबेस के बिना रेल मॉडल JQuery का उपयोग करके एक div से सीएसएस निकालें चेकबॉक्स के समूह के लिए HTML5 "आवश्यक" विशेषता का उपयोग करना? जावास्क्रिप्ट का उपयोग कर एक निर्दिष्ट महीने में नंबर प्राप्त करें? पायथन में, मैं एक छवि के लिए EXIF ​​डेटा कैसे पढ़ूं? इनलाइन फ़ंक्शन बनाम प्रीप्रोसेसर मैक्रोज़ JSON.NET का उपयोग करके क्रमबद्ध क्षेत्रों का क्रम एचटीएमएल संस्थाओं को यूनिकोड में कनवर्ट करें और इसके विपरीत एएसपी.नेट में फ़ाइलों को स्ट्रीम करने का सर्वोत्तम तरीका

बाश में तार की एक सरणी के माध्यम से लूप?

मैं एक स्क्रिप्ट लिखना चाहता हूँ जो 15 तारों के माध्यम से छिपती है (संभवत: संभवतः?) क्या यह संभव है?

कुछ इस तरह:

for databaseName in listOfNames then # Do something end 

वेब के समाधान से एकत्रित समाधान "बाश में तार की एक सरणी के माध्यम से लूप?"

आप इसे इस तरह से उपयोग कर सकते हैं:

 ## declare an array variable declare -a arr=("element1" "element2" "element3") ## now loop through the above array for i in "${arr[@]}" do echo "$i" # or do whatever with individual element of the array done # You can access them using echo "${arr[0]}", "${arr[1]}" also 

इसके अलावा मल्टी-लाइन सरणी घोषणा के लिए काम करता है

 declare -a arr=("element1" "element2" "element3" "element4" ) 

यह संभव है, निश्चित रूप से।

 for databaseName in abcdef; do # do something like: echo $databaseName done 

विवरण के लिए और जब तक, बश लूप्स देखें।

उनमें से कोई भी एक काउंटर शामिल नहीं है …

 #!/bin/bash ## declare an array variable declare -a array=("one" "two" "three") # get length of an array arraylength=${#array[@]} # use for loop to read all values and indexes for (( i=1; i<${arraylength}+1; i++ )); do echo $i " / " ${arraylength} " : " ${array[$i-1]} done 

आउटपुट:

 1 / 3 : one 2 / 3 : two 3 / 3 : three 

4 दिंडू के जवाब में एक ही आत्मा में:

 listOfNames="RA RB RC RD" # To allow for other whitespace in the string: # 1. add double quotes around the list variable, or # 2. see the IFS note (under 'Side Notes') for databaseName in "$listOfNames" # <-- Note: Added "" quotes. do echo "$databaseName" # (ie do action / processing of $databaseName here...) done # Outputs # RA # RB # RC # RD 

B. नामों में कोई श्वेत स्थान नहीं:

 listOfNames="RA RB RC RD" for databaseName in $listOfNames # Note: No quotes do echo "$databaseName" # (ie do action / processing of $databaseName here...) done # Outputs # RA # RB # R # C # RD 

टिप्पणियाँ

  1. दूसरे उदाहरण में, listOfNames="RA RB RC RD" का उपयोग एक ही आउटपुट है।

डेटा लाने के अन्य तरीके शामिल हैं:

  • stdin (नीचे सूचीबद्ध),
  • चर ,
  • एक सरणी (स्वीकार किए जाते हैं उत्तर),
  • एक फाइल …

Stdin से पढ़ें

 # line delimited (each databaseName is stored on a line) while read databaseName do echo "$databaseName" # ie do action / processing of $databaseName here... done # <<< or_another_input_method_here 
  1. बास आईएफएस "रेखा से अलग करने वाला क्षेत्र" [ 1 ] सीमांकक को स्क्रिप्ट में निर्दिष्ट किया जा सकता है ताकि अन्य श्वेत स्थान (अर्थात IFS='\n' , या मैकोज़ IFS='\r' )
  2. मुझे स्वीकार्य उत्तर भी पसंद है 🙂 – मैंने इन स्निपेट को अन्य सहायक तरीकों के रूप में शामिल किया है जो प्रश्न का उत्तर भी देता है।
  3. स्क्रिप्ट फ़ाइल के शीर्ष पर #!/bin/bash सहित निष्पादन वातावरण इंगित करता है।
  4. यह सिर्फ कोड कैसे निकालने के लिए महीने लग गए 🙂

अन्य स्रोत ( पाश पढ़ते समय )

आप ${arrayName[@]} की सिंटैक्स का उपयोग कर सकते हैं

 #!/bin/bash # declare an array called files, that contains 3 values files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) for i in "${files[@]}" do echo "$i" done 

यह भी पढ़ने में आसान है:

 FilePath=( "/tmp/path1/" #FilePath[0] "/tmp/path2/" #FilePath[1] ) #Loop for Path in "${FilePath[@]}" do echo "$Path" done 

घोषित सरणी कोर्न शेल के लिए काम नहीं करता है कॉर्न शेल के लिए नीचे दिए गए उदाहरण का प्रयोग करें:

 promote_sla_chk_lst="cdi xlob" set -A promote_arry $promote_sla_chk_lst for i in ${promote_arry[*]}; do echo $i done 

इसे इस्तेमाल करे। यह काम कर रहा है और परीक्षण किया है।

 for k in "${array[@]}" do echo $k done # For accessing with the echo command: echo ${array[0]}, ${array[1]} 

यदि आप कॉर्न शेल का उपयोग कर रहे हैं, तो " सेट-ए डेटाबेसनाम " है, और वहां " declare -a databasename " है

सभी शैल पर काम करने वाली एक स्क्रिप्ट लिखने के लिए,

  set -A databaseName=("db1" "db2" ....) || declare -a databaseName=("db1" "db2" ....) # now loop for dbname in "${arr[@]}" do echo "$dbname" # or whatever done 

यह सभी गोले पर काम होना चाहिए।

 listOfNames="db_one db_two db_three" for databaseName in $listOfNames do echo $databaseName done 

या केवल

 for databaseName in db_one db_two db_three do echo $databaseName done 

सिंगल लाइन पाशन,

  declare -a listOfNames=('db_a' 'db_b' 'db_c') for databaseName in ${listOfNames[@]}; do echo $databaseName; done; 

आप इस तरह एक आउटपुट प्राप्त करेंगे,

 db_a db_b db_c 
 List=(Item1 Item2 Item3 Item4 Item5 Item6) for Item in ${List[@]} do echo $Item done 

बाहर रखें:

  Item1 Item2 Item3 Item4 Item5 Item6 

@

 List=( Item1 Item2 Item3 Item4 Item5 Item6 'Item 7 needs to be quoted to preserve spaces' ) for Item in "${List[@]}" do echo $Item done 

बाहर रखें:

 Item1 Item2 Item3 Item4 Item5 Item6 Item 7 needs to be quoted to preserve spaces 

*

 List=( Item1 Item2 Item3 Item4 Item5 Item6 'Item 7 needs to be quoted to preserve spaces' ) for Item in "${List[*]}" do echo $Item echo $'\n' done 

@ उत्पादन के बजाय * का प्रयोग करें

 Item1 Item2 Item3 Item4 Item5 Item6 Item 7 needs to be quoted to preserve spaces 

 List=() for Item in `seq 1 1 16` do List+=(Item$Item) done for Item in ${List[*]} do echo $Item done 

बाहर रखा गया है:

 Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10 Item11 Item12 Item13 Item14 Item15 Item16 

यह user2533809 के जवाब के समान है, लेकिन प्रत्येक फ़ाइल को एक अलग आदेश के रूप में निष्पादित किया जाएगा।

 #!/bin/bash names="RA RB RC RD" while read -r line; do echo line: "$line" done <<< "$names" 

प्रत्येक बैश स्क्रिप्ट / सत्र की संभव पहली पंक्ति:

 say() { for line in "${@}" ; do printf "%s\n" "${line}" ; done ; } 

उदाहरण का प्रयोग करें:

 $ aa=( 7 -4 -e ) ; say "${aa[@]}" 7 -4 -e 

मान सकते हैं: echo यहाँ विकल्प के रूप में -e interprets

एक git pull अद्यतन के लिए मैं अपनी परियोजनाओं की एक सरणी के माध्यम से लूप:

 #!/bin/sh projects=" web ios android " for project in $projects do cd $HOME/develop/$project && git pull end