প্রথমত, লক্ষ্য করুন যে $@উদ্ধৃতিগুলি ব্যতীত কোনও লাভ হয় না এবং ব্যবহার করা উচিত নয়। $@কেবল উদ্ধৃত ( "$@") এবং তালিকা প্রসঙ্গে ব্যবহার করা উচিত ।
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 22 দ্বারা শিফটে ব্যবহার করুন ...)। সুতরাং মূলত, আমাদের লুপটি শেষের দ্বিতীয় আর্গুমেন্ট হিসাবে ব্যবহৃত থেকে লুপিং হয়।
সঙ্গে 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