Envsubst এ শেল-ফর্ম্যাট কী?


19

যখন আমি হোঁচট খেয়েছি envsubstআমি কেবলমাত্র নির্দিষ্ট ভেরিয়েবলগুলি প্রতিস্থাপনের জন্য এটি ব্যবহার করতে চেয়েছিলাম এবং সন্দেহ হয়েছিল যে শেল-ফর্ম্যাট প্যারামিটারটি যা চেয়েছিল তা হতে পারে তবে আমি এটি কাজ করতে পারি না।

দুর্ভাগ্যক্রমে, manএবং infoপৃষ্ঠাগুলি কোনও ব্যবহারের উদাহরণ দেয় না এবং কেবল বলে

যদি শেল-ফর্ম্যাট দেওয়া হয়, কেবল শেল-ফরমেটে রেফারেন্সযুক্ত সেই সমস্ত পরিবেশের ভেরিয়েবলগুলি প্রতিস্থাপন করা হবে

যা আমাকে কীভাবে রেফারেন্স করতে হবে তা বলে না।

উত্তর:


20

পাঠ্য দ্বারা নির্দেশিত হিসাবে, আপনাকে কেবল সাধারণ শেল কমান্ডের মতো ভেরিয়েবলগুলি (যেমন $VARNAMEবা দ্বারা ${VARNAME}) উল্লেখ করতে হবে । যাইহোক, আপনাকে নিশ্চিত করতে হবে যে শেলটি তাদের আগে প্রসারিত করবে না।

এটি বর্ণনা করার জন্য এখানে কয়েকটি উদাহরণ দেওয়া হয়েছে (ধরে নেওয়া export FOO=BAR):

$ echo '$FOO$FOO2' | envsubst
BAR

যেমন আপনি দেখতে পাচ্ছেন, by FOO2 "" দ্বারা প্রতিস্থাপিত হয়েছে কারণ এটি সংজ্ঞায়িত হয়নি। এখন আমরা সেই প্রতিস্থাপনটি কেবলমাত্র $ এফইও-র দ্বারা সীমাবদ্ধ করতে পারি:

$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2

""পরিবর্তে এটি ব্যবহার করার ''আগে এটি চাওয়ার আগে প্রতিস্থাপনের দিকে পরিচালিত করবে:

echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2

(এটি কার্যকর কলটির পরিমাণে envsubst "BAR"যা কোনও ভেরিয়েবল সনাক্ত করে তাই কোনওটিই প্রতিস্থাপন করা হয়নি))

manপৃষ্ঠাটি যেমন বলেছে, উল্লেখ করা সমস্ত ভেরিয়েবলগুলি SHELL-FORMATপ্রতিস্থাপন করা হয়েছে, তাই আমরা এটি এমনকি করতে পারি:

echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2

আপনি দেখতে পাচ্ছেন যে SHELL-FORMATএটি বেশ নমনীয়।

পরিশেষে, প্যারামিটার --variablesআপনাকে মূল্যায়ন করতে দেয় যে কোন ভেরিয়েবলগুলি প্রতিস্থাপনের জন্য দ্বারা নির্বাচিত হয় SHELL-FORMAT:

envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3

উপরে থেকে অকাল প্রতিস্থাপনের উদাহরণে এটি ত্রুটিটি দেখিয়ে দিত:

$ envsubst --variables "$FOO"
(empty string returned)

পৃষ্ঠা-তে বলা হয়েছে man, উপস্থিত থাকলে envsubstকোনও স্টিডিনপুট প্রক্রিয়া করে না --variables


8

এখানে কয়েকটি উদাহরণ রয়েছে যা আমাকে এটি সঠিকভাবে কীভাবে ব্যবহার করতে হয় তা বুঝতে সহায়তা করেছে। এটা আমার জন্য অবাক হয়েছিল যে পরামিতিটিতে উল্লিখিত পরিবর্তনগুলি envsubstonly প্রতিস্থাপন করে।

$ export FOOX="foox"
$ export FOOY="fooy"
$ export FOOZ="fooz"

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst            
x foox y fooy z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX'
x foox y $FOOY z $FOOZ

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX $FOOZ'
x foox y $FOOY z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOZ $FOOY'
x $FOOX y fooy z fooz

শেল-ফর্ম্যাটটি কী বোঝায় তা আমি বুঝতে পারি নি, এখনও কেন জানি না কেন এটির মতো নামকরণ করা হয়েছে। তবে উপরোক্ত পরীক্ষাগুলির পরে আমার মনে হয় আমি জানি এটি কী করে।


মানুষ সাহায্য এবং তথ্য থেকে এই উদাহরণগুলি পড়ার পরে এটি আমাকে অনেক সাহায্য করে, কেবল শেল-ফর্ম্যাট উপস্থিত রয়েছে তা জানেন তবে কীভাবে এটি ঘোষণা করবেন জানেন না!
zw963

0

মৌখিকতা কিছুটা বিভ্রান্তি। সহায়তার পাঠ্যটি আরও সাবধানতার সাথে পাঠ্যক্রম করতে:

SHELL-FORMATপরিবেশগত ভেরিয়েবলের উল্লেখ সহ একটি reচ্ছিক পাঠ্য কমান্ড লাইন আর্গুমেন্ট। লেখায় পরিবেশের পরিবর্তনশীল রেফারেন্স করতে ভেরিয়েবলের নামের সাথে একটি সহ প্রিফিক্স করুন $। উদাহরণস্বরূপ: Hello $FOO World $BARএনভায়রনমেন্ট ভেরিয়েবল FOOএবং উল্লেখ BAR। স্ট্রিংয়ের বাকি অংশগুলি উপেক্ষা করা হয়। তাহলে SHELL-FORMATকমান্ড লাইন আর্গুমেন্ট উপস্থিত থাকলে, তারপর পরিবর্তনশীল প্রতিকল্পন stdin মাধ্যমে গৃহীত টেক্সট উপর ঘটে, এটা উল্লেখ করা ভেরিয়েবল মধ্যে সীমাবদ্ধ থাকবে SHELL-FORMATকমান্ড লাইন আর্গুমেন্ট।

সুতরাং আপনার প্রশ্নের সুস্পষ্ট উত্তর দিতে: সাথে ভেরিয়েবলের নামটি উপস্থাপন করুন $

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