কিছু শেল (সহ bash):
IFS=: command eval 'p=($PATH)'
(এর সাথে bash, commandsh / POSIX অনুকরণে না থাকলে আপনি বাদ দিতে পারেন)। তবে সাবধান হন যে অব্যক্ত ভেরিয়েবলগুলি ব্যবহার করার সময় আপনার সাধারণত প্রয়োজনও হয় set -fএবং বেশিরভাগ শেলের মধ্যে এর জন্য স্থানীয় কোনও সুযোগ নেই।
Zsh সহ, আপনি এটি করতে পারেন:
(){ local IFS=:; p=($=PATH); }
$=PATHহ'ল শব্দ বিভাজনকে বাধ্য করা যা ডিফল্টরূপে না হয় zsh(পরিবর্তনশীল প্রসারণে গ্লোব্বিং হয় না তাই set -fশ এমুলেশন না থাকলে আপনার প্রয়োজন হয় না)।
(){...}(বা function {...}) বেনামে ফাংশন বলা হয় এবং সাধারণত স্থানীয় সুযোগ সেট করতে ব্যবহৃত হয়। ফাংশনগুলিতে স্থানীয় সুযোগকে সমর্থন করে এমন অন্যান্য শাঁসের সাথে আপনি এর সাথে কিছু করতে পারেন:
e() { eval "$@"; }
e 'local IFS=:; p=($PATH)'
পসিক্স শেলগুলিতে ভেরিয়েবল এবং অপশনগুলির জন্য স্থানীয় সুযোগ প্রয়োগ করতে, আপনি https://github.com/stephane-chazelas/misc-scriptts/blob/master/locvar.sh এ প্রদত্ত ফাংশনগুলিও ব্যবহার করতে পারেন । তারপরে আপনি এটি ব্যবহার করতে পারেন:
. /path/to/locvar.sh
var=3,2,2
call eval 'locvar IFS; locopt -f; IFS=,; set -- $var; a=$1 b=$2 c=$3'
( যাইহোক, এটি অন্যান্য শাঁসের মতো $PATHব্যতীত উপরের উপায়ে বিভক্ত হওয়া অবৈধ zsh, আইএফএস ক্ষেত্রের ডিলিমিটার, ক্ষেত্র বিভাজক নয়)।
IFS=$'\n' a=($str)
শুধুমাত্র দুটি কাজ, একের পর এক ঠিক ঠিক a=1 b=2।
উপর ব্যাখ্যা একটি নোট var=value cmd:
ইন:
var=value cmd arg
শেলটি /path/to/cmdএকটি নতুন প্রক্রিয়াতে কার্যকর হয় এবং পাস cmdএবং argইন argv[]- var=valueইন করে envp[]। এটি আসলে কোনও ভেরিয়েবল অ্যাসাইনমেন্ট নয়, তবে এক্সিকিউটড কমান্ডে আরও বেশি পরিবেশগত পরিবর্তনশীল । বোর্ন বা কর্ন শেলের সাথে set -k, আপনি এটি লিখতেও পারেন cmd var=value arg।
এখন, এটি বিল্টিনস বা ফাংশনগুলির ক্ষেত্রে প্রযোজ্য নয় যা কার্যকর হয় না । বোর্ন শেলের মধ্যে মধ্যে var=value some-builtin, varশেষ পর্যন্ত পরে মাত্র মতো সেট হওয়া, var=valueএকা। এর অর্থ উদাহরণস্বরূপ যে বিল্টিন রয়েছে var=value echo fooকি না echoতার উপর নির্ভর করে (যা কার্যকর নয়) এর আচরণের পরিবর্তিত হয় ।
পসিক্স এবং / অথবা kshপরিবর্তিত হয়েছে যে বর্ন আচরণ কেবল বিশেষ অন্তর্নির্মিত এক ধরণের বিল্টিনের জন্যই ঘটে । evalএকটি বিশেষ অন্তর্নির্মিত, readনা। বিশেষ বিশেষ বিল্টিনের জন্য, কেবল বিল্টিনের সঞ্চালনের জন্য var=value builtinসেট varকরে যা এটি বাহ্যিক কমান্ড চালিত হওয়ার সাথে অনুরূপ আচরণ করে।
commandকমান্ড মুছে ফেলার জন্য ব্যবহার করা যেতে পারে বিশেষ ব্যক্তিদের অ্যাট্রিবিউট বিশেষ builtins । পসিক্স যা উপেক্ষা করেছে তা হ'ল এটি evalএবং .বিল্টিনগুলির জন্য, এর অর্থ হ'ল শেলগুলি একটি ভেরিয়েবল স্ট্যাকটি প্রয়োগ করতে হবে (যদিও এটি কমান্ড localবা typesetসীমিত সীমাবদ্ধকরণ নির্দিষ্ট করে না ), কারণ আপনি এটি করতে পারেন:
a=0; a=1 command eval 'a=2 command eval echo \$a; echo $a'; echo $a
অথবা এমনকি:
a=1 command eval myfunction
সঙ্গে myfunctionএকটি ফাংশন হচ্ছে ব্যবহার বা সেটিং $aএবং সম্ভাব্য কলিং command eval।
এটি সত্যই একটি উপেক্ষা ছিল কারণ ksh(যা অনুমানটি বেশিরভাগ উপর ভিত্তি করে) এটি কার্যকর করে না (এবং এটিএন্ডটি kshএবং zshএখনও দেয় না) তবে আজকাল, এই দুটি ব্যতীত বেশিরভাগ শাঁস এটি বাস্তবায়ন করে। শেলগুলির মধ্যে আচরণগুলি বিভিন্ন রকম হয় যদিও:
a=0; a=1 command eval a=2; echo "$a"
যদিও। localএটি সমর্থন করে এমন শেলগুলি ব্যবহার করা স্থানীয় সুযোগ বাস্তবায়নের আরও নির্ভরযোগ্য উপায়।
IFS=: command eval …সেটIFSশুধুমাত্র চলাকালীনeval, যেমন ksh 93u মধ্যে ড্যাশ, pdksh এবং ব্যাশ এ, POSIX দ্বারা বাধ্যতামূলক, কিন্তু না। কেএসএসকে বিজোড়-অ-অনুপযুক্ত-এক-আউট হিসাবে দেখানো অস্বাভাবিক।