এনভায়রনমেন্ট ভেরিয়েবল এবং কমান্ডের মধ্যে কখন একটি আধা-কোলন ব্যবহার করবেন


14

LANGবাশ দ্বারা আপডেট হিসাবে দেখা হওয়ার জন্য আধা-কোলন কেন প্রয়োজনীয় তা কেউ ব্যাখ্যা করতে পারেন ?

কাজ করে না:

> LANG=Ja_JP bash -c "echo $LANG"
en_US

কাজ করে:

> LANG=Ja_JP ; bash -c "echo $LANG"
Ja_JP

আমি লিনাক্স এবং সাইগউইনের অধীনে একই সংস্করণে 4.1.10 বাশ উভয়ের সাথেই কাজ করছি

উত্তর:


23

কমান্ডটি পড়ার পরে প্যারামিটার এবং অন্যান্য ধরণের বিস্তৃতি সম্পাদিত হয়, এটি কার্যকর করার আগে

প্রথম সংস্করণ, LANG=Ja_JP bash -c "echo $LANG"একটি একক কমান্ড। এটি যেমন পার্স করার পরে, কিছু কার্যকর $LANGকরার en_USআগে প্রসারিত হয়। একবার bashইনপুট প্রক্রিয়াকরণ শেষ হয়ে গেলে , এটি একটি প্রক্রিয়া কাঁটাচামচ করে, LANG=Ja_JPপ্রত্যাশার মতো পরিবেশে যুক্ত করে এবং পরে সম্পাদন করে bash -c echo en_US

আপনি একক উদ্ধৃতি অর্থাত্ LANG=Ja_JP bash -c 'echo $LANG'আউটপুট দিয়ে প্রসারণ রোধ করতে পারেন Ja_JP

নোট করুন যে কমান্ডের অংশ হিসাবে আপনার যখন ভেরিয়েবল অ্যাসাইনমেন্ট থাকে তখন অ্যাসাইনমেন্টটি কেবলমাত্র সেই কমান্ডের পরিবেশকে প্রভাবিত করে না আপনার শেলের সাথে।

দ্বিতীয় সংস্করণটি LANG=Ja_JP; bash -c "echo $LANG"হ'ল ক্রমানুসারে কার্যকর হওয়া দুটি পৃথক কমান্ড। প্রথমটি হ'ল কমান্ড ব্যতীত একটি সাধারণ পরিবর্তনশীল অ্যাসাইনমেন্ট, সুতরাং এটি আপনার বর্তমান শেলকে প্রভাবিত করে।

সুতরাং, আপনার দুটি স্নিপেট একটি একক এর সূক্ষ্ম পার্থক্য সত্ত্বেও মৌলিকভাবে পৃথক ;

পুরোপুরি অফ-টপিক, তবে আমি সম্ভবত .UTF-8সেটিংস করার সময় সংযোজন করার পরামর্শ দেব LANG। আজকাল একবিংশ শতাব্দীতে ইউনিকোড ব্যবহার না করার কোনও উপযুক্ত কারণ নেই।


দুর্দান্ত উত্তর - ধন্যবাদ! ইউটিএফ -২ যোগ করার বিষয়ে। আমি একটি অ্যাপ্লিকেশনটির লোকেল হ্যান্ডলিং যাচাই করার চেষ্টা করছি যা বেশ কয়েকটি প্ল্যাটফর্মে কাজ করা দরকার যাগুলির বেশিরভাগ পুরানো। এই মত পার্থক্যের মধ্যে (যা ধন্যবাদ আপনি ব্যাখ্যা করেছেন) এবং লিনাক্স এবং সাইগউইনের মধ্যে পার্থক্য আমি নিজেকে একটি বাসের নীচে ফেলে দিতে চলেছি!
রিচার্ড কর্ডেন

5

VAR=value; somecommand সমতুল্য

VAR=value
somecommand

এগুলি একের পর এক নির্যুক্ত কমান্ড কার্যকর করা হয়। প্রথম কমান্ড শেল ভেরিয়েবলের জন্য একটি মান নির্ধারণ করে VAR। যদি না VARইতিমধ্যে একটি এনভায়রনমেন্ট ভেরিয়েবল, এটা পরিবেশ রপ্তানি করা হয় না, এটা শেল অভ্যন্তরীণ রয়ে যায়। একটি বিবৃতি পরিবেশে export VARরফতানি হবে VAR

VAR=value somecommandএকটি ভিন্ন বাক্য গঠন। অ্যাসাইনমেন্টটি VAR=valueপরিবেশের জন্য, তবে এই অ্যাসাইনমেন্টটি কেবল শেকের somecommandপরবর্তী সম্পাদনের জন্য নয়, কেবল এক্সিকিউশন পরিবেশে করা হয় ।

উদাহারন এর মাধ্যমে:

# Assume neither VAR1 nor VAR2 is in the environment
VAR1=value
echo $VAR1                        # displays "value"
env | grep '^VAR1='               # displays nothing
VAR2=value env | grep '^VAR2='    # displays "VAR2=value"
echo $VAR2                        # displays nothing

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