প্রথমত, লক্ষ্য করুন যে $@
উদ্ধৃতিগুলি ব্যতীত কোনও লাভ হয় না এবং ব্যবহার করা উচিত নয়। $@
কেবল উদ্ধৃত ( "$@"
) এবং তালিকা প্রসঙ্গে ব্যবহার করা উচিত ।
for i in "$@"
একটি তালিকা প্রসঙ্গে হিসাবে যোগ্যতা অর্জন করে, তবে এখানে, অবস্থানগত পরামিতিগুলি লুপ করার জন্য, প্রচলিত, সর্বাধিক বহনযোগ্য এবং সহজ ফর্মটি হ'ল:
for i
do something with "$i"
done
এখন, দ্বিতীয়টি থেকে শুরু হওয়া উপাদানগুলি লুপ করার জন্য, প্রমিত এবং সর্বাধিক বহনযোগ্য উপায়টি হ'ল shift
:
first_arg=$1
shift # short for shift 1
for i
do something with "$i"
done
এর পরে shift
, আগে যা ব্যবহৃত হত তা $1
তালিকা থেকে সরানো হয়েছে (তবে আমরা এটি সংরক্ষণ করেছি $first_arg
) এবং যা থাকত $2
তা এখন রয়েছে $1
। অবস্থানগত পরামিতিগুলি বামে অবস্থানে স্থানান্তরিত করা হয়েছে 1
( shift 2
2 দ্বারা শিফটে ব্যবহার করুন ...)। সুতরাং মূলত, আমাদের লুপটি শেষের দ্বিতীয় আর্গুমেন্ট হিসাবে ব্যবহৃত থেকে লুপিং হয়।
সঙ্গে bash
(এবং zsh
এবং ksh93
, কিন্তু যে এটা), একটি বিকল্প করতে হয়:
for i in "${@:2}"
do something with "$i"
done
তবে নোট করুন যে এটি স্ট্যান্ডার্ড sh
সিনট্যাক্স নয় তাই শুরু হওয়া কোনও স্ক্রিপ্টে ব্যবহার করা উচিত নয় #! /bin/sh -
।
ইন zsh
বা yash
, এছাড়াও আপনি করতে পারেন:
for i in "${@[3,-3]}"
do something with "$i"
done
3 য় থেকে 3 য় শেষ আর্গুমেন্টে লুপ করতে।
ইন zsh
, $@
এছাড়াও $argv
অ্যারে হিসাবে পরিচিত । সুতরাং অ্যারেগুলির শুরু বা শেষ থেকে উপাদানগুলিকে পপ করতে, আপনি এটিও করতে পারেন:
argv[1,3]=() # remove the first 3 elements
argv[-3,-1]=()
( shift
এছাড়াও লেখা যেতে পারে 1=()
মধ্যে zsh
)
ইন bash
, আপনি কেবল বিল্টিন $@
সহ উপাদানগুলিকে বরাদ্দ করতে পারেন set
, তাই 3 এলিমেন্টটি শেষ থেকে পপ করতে, এটি এমন কিছু হবে:
set -- "${@:1:$#-3}"
এবং 3 য় থেকে 3 য় শেষ পর্যন্ত লুপ করতে:
for i in "${@:3:$#-5}"
do something with "$i"
done
POSIXly, এর সর্বশেষ 3 টি উপাদান পপ করতে "$@"
আপনাকে একটি লুপ ব্যবহার করতে হবে:
n=$(($# - 3))
for arg do
[ "$n" -gt 0 ] && set -- "$@" "$arg"
shift
n=$((n - 1))
done
for ((i=2; i<=$#; i++)); do something with "${!i}"; done