2013-02-28 10 views
22

मैं कुछ बैश कोड विरासत में मिला है और इन दो पंक्तियों मुझे विस्मयकारी रहे हैं:परिवर्तनीय प्रतिस्थापन में बैश कोलन ऑपरेटर?

branch_name=`git describe --contains --all HEAD` 
branch_name=${branch_name:-HEAD} 

: पेट के ऑपरेटर की मेरी समझ यह है कि है, ताकि एक स्ट्रिंग, -HEAD इस मामले में उपयोग करते हुए एक सूचकांक के आधार पर सबस्ट्रिंग बनाता है, करता है कोई समझ नहीं है।

उत्तर

26

यह परिवर्तनीय branch_name है, यदि यह परिभाषित किया गया है। यदि इसे परिभाषित नहीं किया गया है, तो इसके बजाय HEAD का उपयोग करें।

विवरण के लिए Shell Parameter Expansion देखें।

सबस्ट्रिंग्स नीचे दी गई कुछ पंक्तियां शामिल हैं। दोनों के बीच अंतर

${parameter:-word} 

बनाम
${parameter:offset} 
${parameter:offset:length} 
+0

शानदार उत्तर। ओलाफ लिंक के लिए धन्यवाद। यह मेरे लिए सब कुछ स्पष्ट किया। –

+0

और क्या होगा यदि केवल ': -' है? LIK "$ {RDAUTH: -}" – willemdh

+0

यह एक खाली स्ट्रिंग की तरह काम करता है, टीटी या तो 'RDAUTH' या खाली स्ट्रिंग की सामग्री देता है। –

6

बैश में, ${VAR1:-VAR2} एसक्यूएल के coalesce(VAR1, VAR2), या सी # के VAR1 ?? VAR2 के बराबर है है।

आपके मामले में:

branch_name=`git describe --contains --all HEAD` 
branch_name=${branch_name:-HEAD} 

पहली पंक्ति git आदेश निष्पादित करता है और branch_name वैरिएबल के मान सेट है, तो, दूसरी पंक्ति अपने मूल्य अगर branch_name रिक्त है HEAD का मान निर्दिष्ट coalesces।

जैसा कि आपने कहा ${VAR1:NUM}, एक स्ट्रिंग उपसर्ग आपरेशन (एसक्यूएल में left) है, जो जब एक ऋणात्मक संख्या के साथ प्रयोग किया है के रूप में ${VAR1: -NUMBER} एक प्रत्यय (right) आपरेशन हो जाता है। शून्य चिह्न से पहले व्हाइटस्पेस पर ध्यान दें: यदि आप उस व्हाइटस्पेस को छोड़ देते हैं तो यह coalesce ऑपरेशन बन जाता है जैसा मैंने पहले कहा था।

12

इस मामले में, कोलन - ऑपरेटर के लिए केवल एक संशोधक है। ${branch-HEAD} केवल "HEAD" तक विस्तारित होगा यदि branch अनसेट है, जबकि ${branch:-HEAD}branch नल स्ट्रिंग के साथ "HEAD" तक फैलता है।

$ branch=master 
$ echo "${branch-HEAD} + ${branch:-HEAD}" 
master + master 
$ branch="" 
$ echo "${branch-HEAD} + ${branch:-HEAD}" 
+ HEAD 
$ unset branch 
$ echo "${branch-HEAD} + ${branch:-HEAD}" 
HEAD + HEAD 
संबंधित मुद्दे