कैसे बैश स्क्रिप्ट में तर्कों के माध्यम से लूप करें


16

मैं अज्ञात राशि वाले तर्कों के साथ बैश स्क्रिप्ट लिखना चाहूंगा।

मैं इन तर्कों से कैसे चल सकता हूं और उनके साथ कुछ कर सकता हूं?

एक गलत प्रयास इस तरह दिखेगा:

#!/bin/bash
for i in $args; do 
    echo $i
done

जवाबों:


28

इसके लिए एक विशेष वाक्यविन्यास है:

for i do
  printf '%s\n' "$i"
done

अधिक सामान्यतः, वर्तमान स्क्रिप्ट या फ़ंक्शन के मापदंडों की सूची विशेष चर के माध्यम से उपलब्ध है $@

for i in "$@"; do
  printf '%s\n' "$i"
done

ध्यान दें कि आपको दोहरे उद्धरण चिह्नों की आवश्यकता है $@, अन्यथा पैरामीटर वाइल्डकार्ड विस्तार और क्षेत्र विभाजन से गुजरते हैं। "$@"जादू है: दोहरे उद्धरण चिह्नों के बावजूद, यह कई क्षेत्रों में फैलता है क्योंकि पैरामीटर हैं।

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing

5
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

आपको उद्धरण देना चाहिए $@क्योंकि तर्कों के लिए संभव है कि यदि आप उन्हें उद्धृत करते हैं, तो रिक्त स्थान (या newlines, आदि) को शामिल करें या उनके साथ बच जाएं \। उदाहरण के लिए:

./myscript one 'two three'

उद्धरणों के कारण यह तीन के बजाय दो तर्क हैं। यदि आप उद्धरण नहीं देते हैं $@, तो वे तर्क स्क्रिप्ट के भीतर टूट जाएंगे।


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