বাশ স্ক্রিপ্টে আর্গুমেন্টের মাধ্যমে কীভাবে লুপ করবেন


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

আপনার উদ্ধৃতি দেওয়া উচিত $@কারণ আপনি আর্গুমেন্টগুলিতে স্পেস (বা নিউলাইন ইত্যাদি) ধারণ করা সম্ভব যদি আপনি সেগুলি উদ্ধৃত করেন, বা একটি দিয়ে এড়িয়ে যান \। উদাহরণ স্বরূপ:

./myscript one 'two three'

উদ্ধৃতিগুলির কারণে এটি তিনটির চেয়ে দুটি যুক্তি। যদি আপনি উদ্ধৃতি না দিয়ে থাকেন তবে $@সেই আর্গুমেন্টগুলি স্ক্রিপ্টের মধ্যেই ভেঙে ফেলা হবে।


2
এর জন্য একটি শর্টহ্যান্ড রয়েছেfor f; do ...
গ্লেন জ্যাকম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.