উত্তর:
$-
set
প্রার্থনার সময় বা বিল্টিন কমান্ডটি ব্যবহার করে শেল নিজেই সেট করে বর্তমান বিকল্প পতাকাগুলি :
$ echo $-
himBH
$ set -a
$ echo $-
ahimBH
"${-#*i}"
স্ট্রিং অপসারণের জন্য সিনট্যাক্স: ( POSIX ডকুমেন্টেশন থেকে )
$ {প্যারামিটার # [শব্দ]}
ক্ষুদ্রতম উপসর্গ প্যাটার্ন সরান। একটি প্যাটার্ন উত্পাদন শব্দটি প্রসারিত করা হবে। প্যারামিটারের প্রসারণের পরে প্যারামিটারের ফলাফল হবে, উপসর্গটির ক্ষুদ্রতম অংশটি প্যাটার্নটি মোছার সাথে মিলবে। যদি উপস্থিত থাকে তবে শব্দের অদম্য '#' দিয়ে শুরু হবে না।
$ {প্যারামিটার ## [শব্দ]}
বৃহত্তম উপসর্গের প্যাটার্ন সরান। একটি প্যাটার্ন উত্পাদন শব্দটি প্রসারিত করা হবে। প্যারামিটার সম্প্রসারণের পরে প্যারামিটারের ফলাফল হবে, প্যাটার্নটি মুছার সাথে উপসর্গের বৃহত্তম অংশটি মিলবে।
সুতরাং ${-#*i}
প্রথম i
অক্ষর পর্যন্ত সংক্ষিপ্ততম স্ট্রিংটি সরান :
$ echo "${-#*i}"
mBH
আপনার ক্ষেত্রে, if [ "${-#*i}" != "$-" ]
আপনার শেলটি ইন্টারেক্টিভ কিনা তা পরীক্ষা করা হচ্ছে।
একটি শেল প্যারামিটার আছে $-
। আমার ক্ষেত্রে:
$ echo $-
himB
${-}
$-
ঠিক যেমন একই মত ${foo}
একই $foo
।
#*i
এর অর্থ: চলক মানের শুরু থেকে প্রথমটি (অন্তর্ভুক্ত) অবধি মুছে ফেলুন (যতটা সম্ভব সামান্য; এখানে কোনও পার্থক্য নেই) i
।
$ echo "${-#*i}"
mB
অন্য কথায়: ভেরিয়েবলের মান [ "${-#*i}" != "$-" ]
আছে কিনা তা যাচাই করে, এটি শেলটি ইন্টারেক্টিভ কিনা তা পরীক্ষা করে।i
$-
অন্য কথায়, এটি লেখার জন্য একটি বিভ্রান্তিকর এবং নন-বোর্ন সামঞ্জস্যপূর্ণ উপায়:
case $- in
*i*) ...;;
*) ...;;
esac