जवाबों:
$-वर्तमान विकल्प झंडे शेल द्वारा स्वयं सेट किए गए हैं, आह्वान पर, या 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