আপনি শেল স্ক্রিপ্টে (যেমন আর্গুমেন্ট হিসাবে) পরিবেশের ভেরিয়েবলগুলি "ইনজেকশন" করতে চাইলে এটি মূলত আপনি এটি ব্যবহার করতে পারেন যেমন সেগুলি পরিবেশের মধ্যে স্থাপন করা হয়েছিল export
তবে export
চলমান কমান্ডগুলির আগে সেগুলি স্থায়ীভাবে তালিকার তালিকায় থাকতে না পারে without ।
দ্রষ্টব্য:-k
স্যুইচটির দীর্ঘ রূপ রয়েছে set -o keyword
,।
উদাহরণ
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
এখন যদি আমি set -k
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
তবে আমি যদি কেবল উপরের স্ক্রিপ্টটি চালাতাম:
$ ./cmd1.bash
$
এক্সপোর্ট কি করছে?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
সুতরাং আমরা যদি export | grep VAR
আমাদের স্ক্রিপ্টে এভাবে যুক্ত করে থাকি :
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
এবং আমরা আমাদের উপরের পরীক্ষাগুলি আবার চালিয়েছি:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
তবে ছাড়া set -k
:
$ ./cmd2.bash
$
সুতরাং set -k
আমাদের সাময়িকভাবে ভরগুলিতে ভেরিয়েবল রফতানি করার অনুমতি দিচ্ছে।
আরেকটি উদাহরণ
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
যখন আমরা একাধিক ভেরিয়েবল সেট করি তখন সেগুলি সমস্ত রফতানি হয়:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
সুতরাং তাহলে এটি কেবল সমস্ত পরিবেশের ভেরিয়েবল ইনজেক্ট করছে?
কোন -k
এখানে একটি খুব স্পষ্ট জিনিস করছে। এটি কেবলমাত্র ভেরিয়েবলগুলি রফতানি করে যা কমান্ড কার্যকর হওয়ার সময় কমান্ড লাইনে অন্তর্ভুক্ত ছিল।
উদাহরণ
বলুন আমি এই পরিবর্তনশীল সেট করেছি:
$ VARCMD1="hi"
এখন যখন আমরা একই কমান্ড বাদ দিয়ে চালাচ্ছি VARCMD1="hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
তবে কেন এর অস্তিত্ব আছে?
আমি এই উত্সটি পেয়েছি যা এই বৈশিষ্ট্য সম্পর্কে কিছুটা ব্যাখ্যা করে, শিরোনাম: "কীওয়ার্ড প্যারামিটার অ্যাসাইনমেন্ট স্ট্রিংস"। দ্রষ্টব্য: উত্স URL টি একটি আইপি ঠিকানা ব্যবহার করে তাই আমি এখানে সরাসরি এসইতে লিঙ্ক করতে পারি না।
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
যে কোনও ভাষায় প্রোগ্রামিং করার সময়, নির্ভরযোগ্য কোড লেখার জন্য ভেরিয়েবল এবং এর মান পাস করা সমালোচনা করে। পূর্ণসংখ্যা এবং অ্যারে ভেরিয়েবল প্রকারের পাশাপাশি, অন্যান্য সমস্ত শেল ভেরিয়েবলগুলি স্ট্রিংগুলিকে তাদের মান হিসাবে গ্রহণ করে। ধারাবাহিকভাবে শেল প্রোগ্রামিং ভাষার কথা বলার সময় আমরা "কীওয়ার্ড প্যারামিটার" শব্দটি পছন্দ করি। কীওয়ার্ড প্যারামিটারগুলিতে মান নির্ধারণের সময় কয়েকটি পয়েন্ট এখানে লক্ষ্য রাখতে হবে:
কোনও অপ্রত্যাশিত প্রভাব এড়াতে, সর্বদা একটি কমান্ড স্ট্রিংয়ের সামনে প্যারামিটার অ্যাসাইনমেন্ট সাবস্ট্রিং রাখুন।
বি শেলটিতে, কীওয়ার্ড পরামিতিগুলির নির্ধারিত মানগুলি (স্থানীয়) শেল ভেরিয়েবলগুলিতে সঞ্চিত হবে। বাশ এবং কেএস-তে, পূর্ববর্তী কমান্ডের মূলশব্দ প্যারামিটার অ্যাসাইনমেন্ট স্ট্রিংগুলি শেল ভেরিয়েবলগুলিতে সংরক্ষণ করা হবে না। তারা কেবল বর্তমান কমান্ডটি কার্যকর করার জন্য প্রস্তুত তাত্ক্ষণিক সাবপ্রসেসকে প্রভাবিত করে। মূলশব্দ প্যারামিটার অ্যাসাইনমেন্ট স্ট্রিংগুলির একটি লাইন একা (স্থানীয়) শেল ভেরিয়েবলগুলিতে সঞ্চয় হয়। কীওয়ার্ড প্যারামিটার অ্যাসাইনমেন্ট স্ট্রিংগুলি উপসর্গ, ঘোষণা, টাইপসেট, রফতানি, পঠনযোগ্য এবং স্থানীয় অন্তর্নিহিত কমান্ডের পক্ষে যুক্তি হিসাবে উপস্থিত হতে পারে। [বাশ রেফারেন্স ম্যানুয়ালের ৩.৪ ধারা]
মূলশব্দ প্যারামিটার অ্যাসাইনমেন্ট স্ট্রিংগুলি কমান্ডের নামের পরে স্থাপন করা হলে, আদেশটি কার্যকর করার জন্য আর্গুমেন্ট হিসাবে বিবেচিত হবে।
- কী-ওয়ার্ড প্যারামিটারগুলি সেট কমান্ড দ্বারা ম্যানিপুলেট করা যেতে পারে।
-k
তাদের refactor প্রয়োজন ছাড়াই 30 বছর বয়সী শেল স্ক্রিপ্ট চালাতে সক্ষম। পরিবর্তে উপসর্গ বাক্সটি ব্যবহার করে অস্থায়ী পরিবেশের ভেরিয়েবলগুলি পাস করুন:var1=x var2=y command ...