"$ {- # * আমি}"! = "$ -" এর অর্থ কী?


37

ইন /etc/profileআমি এই দেখুন:

for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done

কী ${-#*i}গড়। প্যারামিটার সম্প্রসারণের কোনও সংজ্ঞা আমি খুঁজে পাচ্ছি না ${-

উত্তর:


40

$-setপ্রার্থনার সময় বা বিল্টিন কমান্ডটি ব্যবহার করে শেল নিজেই সেট করে বর্তমান বিকল্প পতাকাগুলি :

$ echo $-
himBH
$ set -a
$ echo $-
ahimBH

"${-#*i}"স্ট্রিং অপসারণের জন্য সিনট্যাক্স: ( POSIX ডকুমেন্টেশন থেকে )

$ {প্যারামিটার # [শব্দ]}

ক্ষুদ্রতম উপসর্গ প্যাটার্ন সরান। একটি প্যাটার্ন উত্পাদন শব্দটি প্রসারিত করা হবে। প্যারামিটারের প্রসারণের পরে প্যারামিটারের ফলাফল হবে, উপসর্গটির ক্ষুদ্রতম অংশটি প্যাটার্নটি মোছার সাথে মিলবে। যদি উপস্থিত থাকে তবে শব্দের অদম্য '#' দিয়ে শুরু হবে না।

$ {প্যারামিটার ## [শব্দ]}

বৃহত্তম উপসর্গের প্যাটার্ন সরান। একটি প্যাটার্ন উত্পাদন শব্দটি প্রসারিত করা হবে। প্যারামিটার সম্প্রসারণের পরে প্যারামিটারের ফলাফল হবে, প্যাটার্নটি মুছার সাথে উপসর্গের বৃহত্তম অংশটি মিলবে।

সুতরাং ${-#*i}প্রথম iঅক্ষর পর্যন্ত সংক্ষিপ্ততম স্ট্রিংটি সরান :

$ echo "${-#*i}"
mBH

আপনার ক্ষেত্রে, if [ "${-#*i}" != "$-" ]আপনার শেলটি ইন্টারেক্টিভ কিনা তা পরীক্ষা করা হচ্ছে।


23

একটি শেল প্যারামিটার আছে $-। আমার ক্ষেত্রে:

$ echo $-
himB

${-}$-ঠিক যেমন একই মত ${foo}একই $foo

#*iএর অর্থ: চলক মানের শুরু থেকে প্রথমটি (অন্তর্ভুক্ত) অবধি মুছে ফেলুন (যতটা সম্ভব সামান্য; এখানে কোনও পার্থক্য নেই) i

$ echo "${-#*i}"
mB

অন্য কথায়: ভেরিয়েবলের মান [ "${-#*i}" != "$-" ]আছে কিনা তা যাচাই করে, এটি শেলটি ইন্টারেক্টিভ কিনা তা পরীক্ষা করে।i$-

অন্য কথায়, এটি লেখার জন্য একটি বিভ্রান্তিকর এবং নন-বোর্ন সামঞ্জস্যপূর্ণ উপায়:

case $- in
  *i*) ...;;
  *) ...;;
esac

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