$ AT পাঠ: +: $ AT পাঠ}} এর অর্থ কী?


24

আমি সম্প্রতি আমার সাইগউইন প্রোফাইলে নীচের বিষয়গুলি আরও সূক্ষ্মভাবে লক্ষ করেছি:

/usr/local/bin:/usr/bin${PATH:+:${PATH}}

এর মানে কী? কেন শুধু $ পথ নয়? এটি কি 'যদি $ PATH উপস্থিত থাকে তবে যুক্ত করুন: AT पथ'? আমার উদ্দেশ্য হ'ল অর্ডারটি অদলবদল করা এবং উইন্ডোজ পথের পিছনে সাইগউইন পথগুলি রাখা। অতীতে আমি থাকতাম

$PATH:/usr/local/bin:/usr/bin

কিন্তু এটি আমাকে বিভ্রান্ত করে। হয়তো আমার করা উচিত

PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"

সংযুক্ত করার জন্য: AT পথের শেষে?


1
আপনার প্রশ্নের শিরোনামটি সত্যই এসই হট প্রশ্নগুলির সাইড বারে ফর্ম্যাটিংয়ের সাথে মিশেছে i.imgur.com/g6pPmzf.png
ব্র্যাড

উত্তর:


38

:+এক ধরনের প্যারামিটার সম্প্রসারণ :

{{পরামিতি: + [শব্দ]} : বিকল্প মান ব্যবহার করুন।

যদি প্যারামিটারটি সেট না করা বা নাল হয় তবে নালটি প্রতিস্থাপন করা হবে; অন্যথায় শব্দের প্রসার (বা শব্দ বাদ দিলে খালি স্ট্রিং) প্রতিস্থাপন করা হবে।

অন্য কথায়, যদি ভেরিয়েবলটি $varসংজ্ঞায়িত করা হয় তবে এটি echo ${var:+foo}মুদ্রণ করবে fooএবং এটি না থাকলে এটি খালি স্ট্রিংটি মুদ্রণ করবে।

দ্বিতীয়টি :বিশেষ কিছু নয়। এটি ডিরেক্টরিগুলির তালিকার পৃথককারী হিসাবে ব্যবহৃত অক্ষর $PATH। সুতরাং, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"লেখার একটি সংক্ষিপ্ত উপায়:

if [ -z "$PATH" ]; then
    PATH=/usr/local/bin:/usr/bin
else
    PATH=/usr/local/bin:/usr/bin:$PATH
fi

সেট না করা :অবস্থায় অতিরিক্ত যুক্ত করা এড়াতে এটি কেবল একটি চতুর কৌশল $PATH। উদাহরণ স্বরূপ:

$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin

তবে যদি PATHসেট না করে থাকে:

$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:

:নিজেই ডিরেক্টরিতে বর্তমান ডিরেক্টরি যুক্ত করে $PATH। ব্যবহার PATH="/new/dir${PATH:+:$PATH}"এড়ানো এড়ায়। সুতরাং নিশ্চিত, আপনি চাইলে ব্যবহার করতে পারেন PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin", বা আপনি চাইলে ব্যবহার করতে পারেন PATH="$PATH:/usr/local/bin:/usr/bin"। পার্থক্যটি হ'ল পূর্বের অতিরিক্ত অতিরিক্ত যুক্ত করতে পারে :যার ফলে আপনার বর্তমান ডিরেক্টরিটি আপনারতে যুক্ত করা যেতে পারে $PATH


অতিরিক্ত :ক্ষতিকারক?
বিড়াল

4
@ আসলে এটি নয়, এটি আপনার বর্তমান ডিরেক্টরীটি $PATHজুড়েছে (@ অ্যান্ডিবির উত্তর দেখুন )। এটি কিছু পরিস্থিতিতে সুরক্ষার ঝুঁকি হতে পারে (বলুন যে কোনও আক্রমণকারী আপনার বর্তমান ডিরেক্টরিতে একটি ধ্বংসাত্মক স্ক্রিপ্ট আপলোড করেছে এবং এর নাম lsবা কোনও কিছুর নাম দিয়েছে ) তবে বেশিরভাগ ক্ষেত্রেই আপনি সত্যিই আপত্তি করবেন না। আসলে, কিছু সিস্টেম যে PATHকোনও উপায়ে ডিফল্টরূপে বর্তমান ডিরেক্টরিটি যুক্ত করে ।
টেরডন

পাথটি হ'ল এক জায়গা যেখানে আমি পছন্দ করি তারা উপায়গুলি হ'ল cshতারপরে এটি অ্যারে হিসাবে।
হোমটোস্ট

8

আপনি সঠিক, এটির অর্থ 'যদি $ PATH উপস্থিত থাকে - এবং শূন্য হয় না - তবে যুক্ত করুন: $ पथ'।

আপনাকে check PATH বিদ্যমান কিনা তা খতিয়ে দেখা দরকার কারণ আপনি যদি AT PATH অপরিজ্ঞাত থাকে তবে আপনি নেতৃস্থানীয় (বা চলমান) কোলন যুক্ত করতে চান না। পথে শূন্য-দৈর্ঘ্যের (নাল) ডিরেক্টরি নাম :/usr/local/bin:/usr/bin, বা /usr/local/bin:/usr/bin:, বা /usr/local/bin::/usr/bin, এর অর্থ বর্তমান ডিরেক্টরিটি অনুসন্ধান করুন

থেকে উদ্ধৃত man bash:

   PATH   ...
          A zero-length (null) directory name in the value of PATH indicates 
          the current directory.  A  null  directory name may appear as two 
          adjacent colons, or as an initial or trailing colon.
          ...

এটি সম্ভবত আপনি যা করতে চান তা নয়।

নিম্নলিখিত দুটি লাইন একই কাজ করে:

PATH=":/bin"        # search current directory, then /bin
PATH=".:/bin"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.