কিছু শেল (সহ bash
):
IFS=: command eval 'p=($PATH)'
(এর সাথে bash
, command
sh / 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 দ্বারা বাধ্যতামূলক, কিন্তু না। কেএসএসকে বিজোড়-অ-অনুপযুক্ত-এক-আউট হিসাবে দেখানো অস্বাভাবিক।