স্থানীয় কীওয়ার্ড ব্যবহার করে ব্যাশের পরিবর্তনশীল সংজ্ঞা


33

আমি বাশ স্ক্রিপ্টিং শিখছি এবং এটি আমার / usr / শেয়ার / বাশ-সমাপ্তি, লাইন 305 এ পেয়েছি:

local cword words=()

এটার কাজ কি? অনলাইন সমস্ত টিউটোরিয়াল কেবল বিন্যাসে রয়েছে

local var=value

উত্তর:


92

যদিও আমি জর্ডানমের দেওয়া উত্তর পছন্দ করি বলে আমি মনে করি কম অভিজ্ঞ Linuxব্যবহারকারীদের কীভাবে নিজেরাই এই জাতীয় প্রশ্নগুলি মোকাবেলা করতে হবে তা দেখানো সমান গুরুত্বপূর্ণ ।

গুগল অনুসন্ধান ফলাফল পৃষ্ঠায় প্রদর্শিত এলোমেলো পৃষ্ঠাগুলিতে উত্তর খোঁজার চেয়ে প্রস্তাবিত উপায়টি দ্রুত এবং আরও বহুমুখী।

প্রথমত, সমস্ত কমান্ড যা Bashএগুলির একটি সুস্পষ্ট পথ টাইপ না করে চালানো ./commandযেতে পারে যেমন দুটি বিভাগে বিভক্ত করা যেতে পারে: Bash shell builtinsএবং external commandsBash shell builtinsএর সাথে ইনস্টল হয়ে আসুন Bashএবং অংশ external commandsনা থাকায় এটির অংশ Bash। এটি গুরুত্বপূর্ণ কারণ Bash shell builtinsভিতরে নথিবদ্ধ করা হয় man bashএবং তাদের ডকুমেন্টেশনগুলি helpকমান্ডের সাথেও ডেকে আনা যেতে পারে যখন external commandsসাধারণত তাদের নিজস্ব নথিভুক্ত থাকে manpagesবা -h, --helpপতাকাটির কোনও রাজা নিতে পারে । কমান্ডটি একটি Bash shell builtinবা একটি কিনা তা পরীক্ষা করতে external command:

$ type local
local is a shell builtin

এটি প্রদর্শিত হবে how command would be interpreted if used as a command name(থেকে help type)। এখানে আমরা দেখতে পারি যে localএকটি shell builtin। আসুন আরেকটি উদাহরণ দেখুন:

$ type vim
vim is /usr/bin/vim

এখানে আমরা দেখতে পাচ্ছি যে vimএটি একটি shell builtinনয় তবে এর মধ্যে অবস্থিত একটি বাহ্যিক কমান্ড /usr/bin/vim। তবে, কখনও কখনও একই কমান্ড একটি উভয় ইনস্টল করা হতে পারে external commandএবং একটি হতে shell builtinএকই সময়ে। যোগ -aকরার জন্য typeসব সম্ভাবনা তালিকা, উদাহরণস্বরূপ:

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo

এখানে আমরা দেখতে পাচ্ছি যে echoএটি উভয়ই shell builtinএবং একটি external command। তবে, আপনি যদি কেবল টাইপ করে echoচাপেন তবে Returnএকটি কল করা shell builtinহবে কারণ এটি এই তালিকায় প্রথম প্রদর্শিত হয়। মনে রাখবেন যে এই সমস্ত সংস্করণগুলির echoএকই হওয়ার দরকার নেই। উদাহরণস্বরূপ, আমার সিস্টেমে পতাকা /usr/bin/echoলাগে --helpযখন builtinনা হয়।

ঠিক আছে, এখন যখন আমরা জানি যে localএটি একটি শেল অন্তর্নির্মিত এটি আসুন এটি কীভাবে কাজ করে তা খুঁজে বার করুন:

$ help local
local: local [option] name[=value] ...
Define local variables.

Create a local variable called NAME, and give it VALUE.  OPTION can
be any option accepted by `declare'.

Local variables can only be used within a function; they are visible
only to the function where they are defined and its children.

Exit Status:
Returns success unless an invalid option is supplied, an error occurs,
or the shell is not executing a function.

উল্লেখ্য প্রথম লাইন: name[=value][এবং এর মধ্যে সমস্ত ]কিছুই .চ্ছিক । এটি একটি প্রচলিত কনভেনশন যা বিশ্বের অনেক manpagesএবং ডকুমেন্টেশনের আকারে ব্যবহৃত হয় *nix। বলা হচ্ছে, আপনার প্রশ্নে যে আদেশটি আপনি জিজ্ঞাসা করেছেন তা পুরোপুরি আইনী। পরিবর্তে, ...চরিত্রের অর্থ পূর্ববর্তী যুক্তি পুনরাবৃত্তি করা যেতে পারে। আপনি এই সংস্করণটির কয়েকটি সংস্করণেও পড়তে পারেন man man:

The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.

bold text          type exactly as shown.
italic text        replace with appropriate argument.
[-abc]             any or all arguments within [ ] are optional.
-a|-b              options delimited by | cannot be used together.
argument ...       argument is repeatable.
[expression] ...   entire expression within [ ] is repeatable.

সুতরাং, দিনের শেষে, আমি আশা করি যে এখন আপনার পক্ষে Linuxকাজ করার বিভিন্ন কমান্ড কীভাবে বোঝার একটি সহজ সময় হবে ।


5
খুব সুন্দর উত্তর। আমি এটির মাধ্যমে পড়ছিলাম এই আশায় যে আপনি ঠিক করছিলেন যে কোনও শিক্ষানবিস কীভাবে অ্যারে অ্যাসাইনমেন্টটি কীভাবে আবিষ্কার করেছিলেন তা কেবল কোড থেকেই var=(), তবে আমি মনে করি যে আপনি কী সন্ধান করছেন তার নাম না জেনেও কিছুটা বের করা যায় । ;)
ওয়াইল্ডকার্ড

নন-ব্যাশ শেলগুলিও কি সমর্থন করে local?
পালসুইম

2
আমি সাইন ইন করেছিলাম যাতে আমি আপনার উত্তরটিকে উজ্জীবিত করতে পারি :)
হরেন্দ্র সিং

@ উইল্ডকার্ড যেহেতু অ্যারেটি কোনও আদেশের বিপরীতে বাশ সিনট্যাক্স, তাই আপনি এটি সংজ্ঞায়িত করতে পারেন man bash। সেখানে একবার, /Arrays$অ্যারে বিভাগে লাফিয়ে টাইপ করুন। ( $পরবর্তী Arraysঅনুচ্ছেদে হ'ল বিভাগে ইন-পাঠ্য রেফারেন্সের মাধ্যমে সাইকেল চালানো প্রতিরোধ করা)) সেখান থেকে আপনি fকোনও পৃষ্ঠা এগিয়ে bযেতে বা পিছনে যেতে টাইপ করতে পারেন । qআপনার কাজ শেষ হয়ে গেলে ম্যান পৃষ্ঠা থেকে প্রস্থান করতে টাইপ করুন।
টেলর এডমিস্টন

এছাড়াও, helpকোনও আরগস ছাড়াই চলমান সমস্ত ব্যাশ বিল্টিনগুলি তালিকাভুক্ত করে যদি আপনি আরও দেখার আগ্রহী হন।
টেলর এডমিস্টন

29

localশব্দ একাধিক ভেরিয়েবল গ্রহণ করতে পারেন। একটি মান সহ ভেরিয়েবল সরবরাহ করা alচ্ছিক। আপনার উদাহরণ দুটি ভেরিয়েবল ঘোষণা করে cwordএবং wordswordsপরিবর্তনশীল একটি খালি অ্যারে নির্ধারিত হয়।


18

localকেবলমাত্র বর্তমানে সংজ্ঞায়িত ফাংশনে স্কোপ থাকার জন্য কেবল একটি ভেরিয়েবল ঘোষণা করে, যাতে প্রধান নির্বাহী পরিবেশটি মানটি "দেখতে" না পারে। আপনি localকোনও ফাংশনের বাইরে ব্যবহার করতে পারবেন না । উদাহরণ

func() {
   nonlocal="Non local variable"
   local onlyhere="Local variable"
}
func
echo $nonlocal 
echo $onlyhere

আউটপুট: নন লোকাল ভেরিয়েবল

সুতরাং $onlyhereফাংশনের সুযোগ বাইরে দৃশ্যমান ছিল না।


এই উত্তরটি আরও বোধগম্য করে যারা দ্রুত বোঝার প্রয়োজন।
অ্যালেক্স রাজ কালীমূর্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.