इस संदर्भ में $ {1: 0: 2} का क्या अर्थ है?


19

मैं नीचे दिखाए गए कोड को देख रहा हूं और यह इनपुट की जांच करता है कि पंक्ति / स्तंभ तर्क -rया तो शुरू होता है या -c${1:0:2}इस संदर्भ में क्या मतलब है?

rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
   echo $correctCmdMsg >&2
   exit 1
fi

7
आपको उस शेल को शामिल करना चाहिए जिसका आप प्रश्न में उपयोग कर रहे हैं। जो शायद है bash
राफेल अहरेंस

2
यह कमांड लाइन तर्कों को पार्स करने के लिए किया गया लगता है। शायद आप को पता है के बारे में चाहता हूँ getoptया getoptsआपके जीवन को आसान (या जिसे ऐसा किया के जीवन) बनाने के लिए।
कार्लोस कैंपड्रेस्स

जवाबों:


31

यह एक पदार्थ विस्तार (पैरामीटर विस्तार के उपवर्ग) खोल का पैटर्न है।

प्रारूप है:

${parameter:offset:length}

और अनुक्रमण 0 से शुरू होता है।

कहते हैं, आपके पास एक चर है foo, फिर ${foo:0:2}पहले दो वर्णों (स्थिति 0 से अगले 2) प्राप्त करता है।

उदाहरण:

$ foo=spamegg
$ echo "${foo:0:2}"
sp

आपके मामले में, पहला नंबर, 1चर नाम को संदर्भित करता है $1, जो कमांड लाइन (मुख्य कार्यक्रम में) के माध्यम से पारित पहला तर्क है या फ़ंक्शन के लिए दिया गया पहला तर्क है।

तो आपके मामले में, "${1:0:2}"होगा:

  • इंडेक्स 0 यानी पहले वर्ण से शुरू होने वाली सबस्ट्रिंग को निकालना शुरू करें

  • और अगले दो वर्णों तक जारी रखें

इसलिए ऑपरेशन के बाद आपको इनपुट स्ट्रिंग के पहले दो अक्षर (0 और 1 पर अनुक्रमित) मिलेंगे।

[ "${1:0:2}" != $rowArgName ]और [ "${1:0:2}" != $colArgName ]अगर उत्पादन subtring कुछ अन्य तार के बराबर है जाँच कर रहे हैं।


1
मूलतः यह है या नहीं, उपयोगकर्ता के लिए जाँच कर रहा है के साथ $ 1 प्रदान की -cया -rहै, जो शायद बेहतर के साथ लागू किया गया हैgetopts
सर्गी Kolodyazhnyy

15

से एक छोटा सा अर्क man bash:

$ {पैरामीटर: ऑफसेट: लंबाई}

पदार्थ का विस्तार । द्वारा निर्दिष्ट चरित्र पर शुरू करने lengthके मूल्य के पात्रों तक का विस्तार । यदि पैरामीटर है , एक अनुक्रमित सरणी द्वारा subscripted या , या एक साहचर्य सरणी नाम, परिणाम के रूप में नीचे वर्णित भिन्न होते हैं। यदि छोड़ दिया जाता है, तो उसके द्वारा निर्दिष्ट चरित्र पर शुरू करने और मूल्य के अंत तक विस्तार के मूल्य के विकल्प का विस्तार होता है। और अंकगणितीय अभिव्यक्तियाँ हैं (नीचे देखें कृत्रिम अवलोकन)।parameteroffset@@*lengthparameteroffsetlengthoffset


5

यह एक चर से एक सरल सबस्ट्रिंग निष्कर्षण है। विचाराधीन चर स्क्रिप्ट का पहला पैरामीटर है (जो है 1)।

अगर मेरे पास एक चर है, तो FOO, मैं इसके मूल्य के पहले दो अक्षर देख सकता हूं ${FOO:0:2}। आपके तर्क में वही बात पहले तर्क के साथ की जा रही है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.