বাশ, সংস্করণ ৪.৩ থেকে, ফেব্রুয়ারী ২০১৪ (?), একই উপকারী কর্মক্ষমতা এবং দিকনির্দেশনা প্রভাব সহ "ইওল" এর বাইরে রেফারেন্স ভেরিয়েবল বা নাম রেফারেন্সের (নেমরেফ) স্পষ্ট সমর্থন রয়েছে এবং যা আপনার স্ক্রিপ্টগুলিতে আরও স্পষ্ট এবং আরও শক্ত হতে পারে "'ওয়াল' করতে ভুলে যেতে এবং এই ত্রুটিটি ঠিক করতে হবে":
declare [-aAfFgilnrtux] [-p] [name[=value] ...]
typeset [-aAfFgilnrtux] [-p] [name[=value] ...]
Declare variables and/or give them attributes
...
-n Give each name the nameref attribute, making it a name reference
to another variable. That other variable is defined by the value
of name. All references and assignments to name, except for⋅
changing the -n attribute itself, are performed on the variable
referenced by name's value. The -n attribute cannot be applied to
array variables.
...
When used in a function, declare and typeset make each name local,
as with the local command, unless the -g option is supplied...
এবং আরো:
প্যারামিটার
একটি ভেরিয়েবলকে নেমরেফ তৈরির জন্য -n বিকল্পটি ব্যবহার করে নাম বা স্থানীয় বিল্টিন কমান্ডের (নীচে ঘোষিত এবং স্থানীয় বর্ণনার বিবরণ দেখুন) অথবা অন্য ভেরিয়েবলের একটি রেফারেন্স নির্ধারণ করা যেতে পারে। এটি ভেরিয়েবলকে অপ্রত্যক্ষভাবে হেরফের করতে দেয় allows যখনই নেমরেফ ভেরিয়েবলকে ⋅ রেফারেন্সযুক্ত বা নির্ধারিত করা হয়, অপারেশনটি আসলে নামরেফ ভেরিয়েবলের মান দ্বারা নির্দিষ্ট ভেরিয়েবলের উপর সঞ্চালিত হয়। একটি নেমরেফ শেল ফাংশনগুলির মধ্যে সাধারণত একটি ভেরিয়েবলের উল্লেখ করতে ব্যবহৃত হয় যার নামটি আর্গুমেন্ট হিসাবে আর্গুমেন্ট হিসাবে পাস হয়। উদাহরণস্বরূপ, যদি কোনও চলক নামটি শেল ফাংশনে তার প্রথম যুক্তি হিসাবে চালিত হয় তবে এটি চলছে
declare -n ref=$1
ফাংশনের অভ্যন্তরে একটি নেমরেফ ভেরিয়েবল রেফ তৈরি হয় যার মান হল প্রথম আর্গুমেন্ট হিসাবে ভেরিয়েবল নামটি পাস। রেফারেন্সের জন্য রেফারেন্স এবং অ্যাসাইনমেন্টগুলি ভেরিয়েবলের রেফারেন্স এবং অ্যাসাইনমেন্ট হিসাবে বিবেচিত হয় যার নাম ⋅ 1 হিসাবে পাস হয়েছিল। যদি লুপের জন্য নিয়ন্ত্রণের ভেরিয়েবলের নামরেফ বৈশিষ্ট্য থাকে তবে শব্দের তালিকাটি শেল ভেরিয়েবলের একটি তালিকা হতে পারে এবং লুপটি কার্যকর হওয়ার পরে তালিকার প্রতিটি শব্দের জন্য একটি নাম রেফারেন্স প্রতিষ্ঠিত হবে। অ্যারে ভেরিয়েবলগুলিকে -n গুণাবলী দেওয়া যায় না। তবে নেমরেফ ভেরিয়েবলগুলি অ্যারে ভেরিয়েবল এবং সাবস্ক্রিপ্টড অ্যারে ভেরিয়েবলগুলি উল্লেখ করতে পারে। নেমরেফগুলি আনসেট বিল্টিনটিতে -n বিকল্পটি ব্যবহার করে আনসেট আনতে পারে। অন্যথায়, যদি আনসেটটি আর্গুমেন্ট হিসাবে নেমরেফ ভেরিয়েবলের নামের সাথে কার্যকর করা হয়,
উদাহরণস্বরূপ ( সম্পাদনা 2 : (আপনাকে ধন্যবাদ রন) ফাংশন-অভ্যন্তরীণ ভেরিয়েবল নামটি স্পেস-এর (পূর্বনির্ধারিত) নাম, বাইরের ভেরিয়েবল সংঘর্ষকে হ্রাস করতে, যা শেষ পর্যন্ত সঠিকভাবে উত্তর দেওয়া উচিত, কার্স্টেনের মন্তব্যে উত্থাপিত বিষয়টি):
# $1 : string; your variable to contain the return value
function return_a_string () {
declare -n ret=$1
local MYLIB_return_a_string_message="The date is "
MYLIB_return_a_string_message+=$(date)
ret=$MYLIB_return_a_string_message
}
এবং এই উদাহরণটি পরীক্ষা:
$ return_a_string result; echo $result
The date is 20160817
নোট করুন যে ব্যাশ "ডিক্লেয়ার" বিল্টিন, যখন কোনও ফাংশনে ব্যবহৃত হয়, ঘোষিত ভেরিয়েবলটিকে ডিফল্টরূপে "স্থানীয়" করে তোলে এবং "-n" "স্থানীয়" দিয়েও ব্যবহার করা যেতে পারে।
আমি "বিরক্তিকর স্থানীয়" ভেরিয়েবলগুলির মধ্যে "গুরুত্বপূর্ণ ঘোষণা" ভেরিয়েবলকে পৃথক করতে পছন্দ করি, সুতরাং "ডিক্লেয়ার" এবং "স্থানীয়" এভাবে ব্যবহার করে ডকুমেন্টেশন হিসাবে কাজ করে।
সম্পাদনা 1 - (কার্স্টেনের নীচে মন্তব্য করার প্রতিক্রিয়া) - আমি আর কোনও নীচে মন্তব্য যুক্ত করতে পারছি না, তবে কার্স্টেনের মন্তব্যটি আমাকে ভাবতে পেরেছিল, তাই আমি নিম্নলিখিত পরীক্ষাটি করেছিলাম যা ওয়ার্কস ফাইন, আফিক্স - কার্স্টেন আপনি যদি এটি পড়েন তবে দয়া করে একটি সঠিক সেট সরবরাহ করুন কমান্ড লাইন থেকে পরীক্ষার পদক্ষেপগুলি, আপনার ধরে নেওয়া সমস্যাটি উপস্থিত রয়েছে তা দেখিয়ে, কারণ নিম্নলিখিত পদক্ষেপগুলি ঠিক কাজ করে:
$ return_a_string ret; echo $ret
The date is 20170104
(উপরের ফাংশনটিকে বাশ টার্মে আটকানোর পরে আমি এখনই এটি চালিয়েছি - যেমন আপনি দেখতে পাচ্ছেন, ফলাফলটি ঠিক কাজ করে))
function funcName {
যেমন , প্রার-পসিক্স লিগ্যাসি সিনট্যাক্সটি প্রারম্ভিক ksh থেকে উত্তরাধিকার সূত্রে প্রাপ্ত (যেখানে এর অর্থগত পার্থক্য রয়েছে যা বাশ সম্মান করে না)। পরিবর্তে,funcName() {
না সহfunction
, ব্যবহার করা উচিত; দেখতে wiki.bash-hackers.org/scripting/obsolete