পরিবেশের পরিবর্তনশীলগুলিতে একক এবং ডাবল উদ্ধৃতিগুলির তাত্পর্যটি কী?


19

আমি আমার প্রোফাইলে এই জাতীয় কিছু পরিবেশের পরিবর্তনশীল সংজ্ঞায়িত করেছি:

MY_HOME="/home/my_user"

তবে পরিবর্তনগুলি মূল্যায়ন বলে মনে হচ্ছে না যতক্ষণ না আমি উদ্ধৃতিগুলি সরিয়ে ফাইলে এবং ফাইলটি পুনরায় উত্স করি না। আমি বিশ্বাস করি যে স্পেসগুলি থাকলে কোটগুলি প্রয়োজনীয়, এবং যদি পলায়নগুলি পছন্দ না হয় তবে একক উদ্ধৃতি ব্যবহৃত হয়। কেউ কি পরিবর্তনশীল সংজ্ঞাগুলিতে একক এবং দ্বৈত উদ্ধৃতিগুলির তাত্পর্য স্পষ্ট করতে পারে? ফ্রন্ট-টিকস এবং ব্যাক-টিকস সম্পর্কে কীভাবে?

উত্তর:


23

আমি মনে করি আপনি পরিভাষা সম্পর্কে বিভ্রান্ত।

একটি "পরিবেশের পরিবর্তনশীল" হ'ল কেবল শেল ভেরিয়েবল যা কোনও শিশু প্রক্রিয়া উত্তরাধিকার সূত্রে প্রাপ্ত।

আপনি আপনার উদাহরণে যা করছেন তা শেল ভেরিয়েবল তৈরি করছে। আপনি এটি রপ্তানি না করা পর্যন্ত এটি পরিবেশে নেই:

MY_HOME="/home/my_user"
export MY_HOME

"এমওয়াইহোম" নামে একটি ভেরিয়েবল প্রায় সমস্ত শেলের মধ্যে রাখে (সিএসএস, টিসিএস ব্যতীত)।

এই বিশেষ ক্ষেত্রে, ডাবল-কোটগুলি অতিরিক্ত অতিরিক্ত are তাদের কোনও প্রভাব নেই। গ্রুপ সাবস্ট্রিংগুলিকে ডাবল-কোট করে, তবে ভেরিয়েবল প্রতিস্থাপন করতে আপনি যে কোনও শেল ব্যবহার করেন তা অনুমতি দেয়। একক-উদ্ধৃতি গোষ্ঠীগুলি সাবস্ট্রিংগুলি এবং প্রতিস্থাপন প্রতিরোধ করে। আপনার উদাহরণ অ্যাসাইনমেন্টের যেহেতু এতে কোনও ভেরিয়েবল নেই, তাই ডাবল-কোটগুলি একক-উদ্ধৃতি হিসাবে উপস্থিত হতে পারে।

V='some substrings grouped together'  # assignment
X="Put $V to make a longer string"    # substitution and then assignment
Y=`date`                              # run command, assign its output
Z='Put $V to make a longer string'    # no substition, simple assignment

আপনি এটি রপ্তানি না করা পর্যন্ত পরিবেশে কিছুই নেই।


18

শেল ভেরিয়েবল বনাম পরিবেশের ভেরিয়েবল

MY_HOME="/home/my_user"সেট করে শেল পরিবর্তনশীল নামক MY_HOME। শেলগুলি প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং ভেরিয়েবল রয়েছে (একে প্যারামিটারও বলা হয়)। এই নিয়োগের পরে, আপনি ভেরিয়েবলের মান ব্যবহার করতে পারেন, যেমন echo "$MY_HOME"

শেল ভেরিয়েবলগুলি একটি অভ্যন্তরীণ শেল ধারণা। যখন শেল ইনস্ট্যান্সটি সমাপ্ত হয়, তখন MY_HOMEভুলে যায়। প্রতিটি প্রোগ্রাম যা জানে এবং তার বাচ্চাদের কাছে সংক্রমণ করে তা হ'ল পরিবেশের পরিবর্তনশীল

শেলের ভিতরে, পরিবেশের ভেরিয়েবল এবং শেল ভেরিয়েবলগুলি খুব অনুরূপ উপায়ে কাজ করে। আসলে কী হয় শেলটি তার পিতামাতার কাছ থেকে প্রাপ্ত সমস্ত পরিবেশের ভেরিয়েবলগুলি শেল ভেরিয়েবল হয়। বিপরীতে, শেল স্ক্রিপ্টে সংজ্ঞায়িত শেল পরিবর্তনশীল আপনি যদি এটি রফতানি করেন তবে পরিবেশের পরিবর্তনশীল হয়ে উঠবে ।

export MY_HOME="/home/my_user"

আরও বিশদ আপনি প্রথম পড়াতে এড়াতে পারেন

শেল ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে পরিবেশের ভেরিয়েবলগুলি না পরিণত হওয়ার কারণটি হ'ল একটি স্ক্রিপ্ট ঘটনাক্রমে এমন কোনও চলক নামটি ব্যবহার করতে পারে যা এটি চালু করা একটি প্রোগ্রামের অর্থপূর্ণ এবং আংশিকভাবে কেবল historicalতিহাসিক।

exportপ্রতিবার যখন আপনি একটি ভেরিয়েবলের নাম পরিবর্তন করেন তখন কয়েকটি খুব পুরানো শেল ব্যবহার করা প্রয়োজন , তবে সমস্ত আধুনিক শেলগুলি পরিবেশের ভেরিয়েবলের জন্য অ্যাসাইনমেন্টগুলি ট্র্যাক করে রাখে, যাতে নিম্নলিখিত স্নিপেট প্রতিধ্বনিত হয় bar:

myvar=foo
export myvar
myvar=bar
env | grep '^myvar='

এছাড়াও, বেশ কয়েকটি পুরানো শেলের জন্য আলাদা কমান্ডের প্রয়োজন হয় myvar=fooএবং export myvarসমস্ত আধুনিক শেল বুঝতে পারে export myvar=foo

আপনি set -aসমস্ত শেল ভেরিয়েবল অ্যাসাইনমেন্ট তৈরি করতে দৌড়াতে পারবেন স্বয়ংক্রিয়ভাবে চলকটি রফতানি করতে, যাতে myvar=fooআপনি export myvar=fooযদি set -aপ্রথম শেলটিতে ছুটে যান তবে এটি সমান ।

উদ্ধৃতি দেওয়ার সময়

উদ্ধৃতিটি বেশিরভাগ অর্থেগোনাল। আপনি ভেরিয়েবলের জন্য যে মানটি নির্ধারণ করছেন তাতে যদি শেলের জন্য বিশেষ কোনও অক্ষর না থাকে তবে আপনার কোনও উদ্ধৃতি প্রয়োজন হবে না। যদি বিশেষ চরিত্রগুলি থাকে তবে আপনার এগুলিকে একক উদ্ধৃতি বা ডাবল কোট বা ব্যাকস্ল্যাশ বা এর সংমিশ্রণ দিয়ে রক্ষা করতে হবে। এটি প্লেইন myvar=valueসিনট্যাক্স এবং exportইউটিলিটি উভয়ের জন্য যায় ।

অ্যাসাইনমেন্ট সিনট্যাক্স এবং সিনট্যাক্সের মধ্যে একটি পার্থক্য রয়েছে export। শেলটি পরিবর্তনশীল বিকল্পগুলির ফলাফলকে $fooআরও প্রসারিত করে ক্ষেত্র (শব্দ) বিভাজন এবং পথের নাম প্রসারিত (গ্লোবিং) সম্পাদন করে । এর অর্থ এই যে যদি এর মান myvarহয় hello ​ *, তারপর echo $myvarছাপে helloএকটি একক স্থান দ্বারা অনুসরণ বর্তমান ডিরেক্টরির সকল ফাইলের তালিকা অনুসরণ। এই প্রায় না কাঙ্ক্ষিত, অত: পর সাধারণ নীতি সবসময় পরিবর্তনশীল বদল প্রায় ডবল কোট ব্যবহার (যদি না আপনি কি জানেন যে আপনি সম্প্রসারণ বা ক্ষেত্র বিভাজন পথনাম প্রয়োজন): echo "$myvar"। একটি সহজ নিয়োগ ক্ষেত্রে সালে othervar=$myvarআসলে নির্ভরযোগ্যভাবে কপি মান myvarথেকেothervar, কারণ গ্লোব্বিং এবং শব্দের বিভাজন কার্যনির্বাহনে বাধা রয়েছে (কারণ তারা একাধিক শব্দ তৈরি করে তবে একটি শব্দই প্রত্যাশিত)। তবে এই সরবরাহটি প্রযোজ্য নয় export। সুতরাং আপনি যদি একটি সাধারণ নিয়ম মনে রাখতে চান তবে কেবল সর্বদা পরিবর্তনশীল বিকল্পের দ্বিগুণ ডাবল উদ্ধৃতি ব্যবহার করুন।


আপনি কি দয়া করে ব্যাখ্যা করতে পারেন "উদ্ধৃতিটি বেশিরভাগ অর্থেগোনাল" " "উদ্ধৃতিতে" বিভাগে? আমি এই বাক্যে অরথোগোনালটির অর্থ পাই না ।
ডি কে বোস

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