ঠিক আছে, "$@"
অবস্থানগত পরামিতিগুলির তালিকায় প্রসারিত হয়, অবস্থানগত পরামিতিগুলির জন্য একটি যুক্তি।
যখন তুমি কর:
set '' 'foo bar' $'blah\nblah'
cmd "$@"
cmd
এই 3 টি আর্গুমেন্টের সাথে আহ্বান করা হচ্ছে: খালি স্ট্রিং foo bar
এবং blah<newline>blah
। শেলটি execve()
সিস্টেম কলকে এমন কিছু দিয়ে কল করবে :
execve("/path/to/cmd", ["cmd", "", "foo bar", "blah\nblah"], [envvars...]);
আপনি যদি শেল কমান্ড লাইনটি পুনরায় গঠন করতে চান (এটি শেল ভাষার কোড) যা একই অনুরোধটি পুনরুত্পাদন করতে পারে, আপনি যেমন কিছু করতে পারেন:
awk -v q="'" '
function shellquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
BEGIN {
for (i = 1; i < ARGC; i++) {
printf "%s", sep shellquote(ARGV[i])
sep = " "
}
printf "\n"
}' cmd "$@"
বা সহ zsh
, বিভিন্ন ধরণের উদ্ধৃতি চাওয়া:
$ set '' 'foo bar' $'blah\nblah'
$ print -r -- cmd "${(q)@}"
cmd '' foo\ bar blah$'\n'blah
$ print -r -- cmd "${(qq)@}"
cmd '' 'foo bar' 'blah
blah'
$ print -r -- cmd "${(qqq)@}"
cmd "" "foo bar" "blah
blah"
$ print -r -- cmd "${(qqqq)@}"
cmd $'' $'foo bar' $'blah\nblah'
বা সহ zsh
, bash
বা ksh93
( bash
অন্যান্য শাঁসের সাথে এখানে ওয়াইএমএমভি):
$ set '' 'foo bar' $'blah\nblah'
$ printf cmd; printf ' %q' "$@"; printf '\n'
cmd '' foo\ bar $'blah\nblah'
আপনি শেলটির xtrace বিকল্পটিও ব্যবহার করতে পারেন যা শেলটি এটি কার্যকর করতে চলেছে তা মুদ্রণের কারণ করে:
$ (PS4=; set -x; : cmd "$@")
: cmd '' 'foo bar' 'blah
blah'
উপরে, আমরা যুক্তিরূপে :
কোনও অপ-কমান্ড cmd
এবং অবস্থানগত পরামিতিগুলি চালিয়েছি। আমার শেল এগুলি শেলের পুনর্নির্মাণের জন্য উপযুক্ত একটি দুর্দান্ত উদ্ধৃত ফ্যাশনে মুদ্রিত করেছে। সমস্ত শেল এটি করে না।
$
-স্প্যাশন এবং অন্যান্য ডাবল-কোট রক্ষা করতে খুব কার্যকর নয় । এই কারণেই অন্যান্য উত্তরগুলি স্ট্রিংয়ের ভিতরে একক উদ্ধৃতিগুলি পরিচালনা করতে কিছু দৈর্ঘ্যে যাওয়ার সময় একক উদ্ধৃতি ব্যবহার করে বা স্ট্রিংয়ের একটি উদ্ধৃত অনুলিপি তৈরির জন্য শেলের নিজস্ব বৈশিষ্ট্য ব্যবহার করে।