2014-06-20 6 views
7

मैच के लिए मैं निम्नलिखित है:बैश regex अर्थ संस्करण संख्या

versionNumber=$(sw_vers -productVersion) # Finds version number 

versionShort=${versionNumber:0:4} # Cut string to 1 decimal place for calculation 

जो काम करता है जब संस्करणों इस तरह हैं:

10.9.2 
10.9.5 

लेकिन यह

10.10.3 
रूप

से मेल नहीं खाएगी यह केवल

लौटाएगा

लेकिन मैं versionShort

10.10 

मैं मुख्य संस्करण, पहले डॉट और जैसा कि ऊपर लघु संस्करण से मेल करने के लिए इच्छुक हूँ करने के लिए सेट किया जा करना चाहते हैं। -

उत्तर

10

Regexpless समाधान काट पिछले डॉट और जो कुछ भी यह इस प्रकार है:

versionShort=${versionNumber%.*} 
2

Regexp समाधान:

[[ $versionNumber =~ ^[0-9]+\.[0-9]+ ]] && echo "${BASH_REMATCH[0]}" 

यह हमेशा पहले दो नंबर प्रिंट होगा उदाहरण के लिए इन सभी के लिए,:

10.5 
10.5.9 
10.5.8.2 

परिणामस्वरूप 10.5 आउटपुट होगा। कुछ गलत हुआ है (कोई मिलान नहीं मिला) यह जांचने के लिए आप else क्लॉज भी जोड़ सकते हैं।

यहाँ एक लंबे समय तक संस्करण है:

if [[ $versionNumber =~ ^[0-9]+\.[0-9]+ ]]; then 
    versionShort=${BASH_REMATCH[0]} 
else 
    echo "Something is wrong with your version" >&2 
fi 
+0

कैसे उपयोग कर सकते हैं सकता है क्या मैं परिणाम को एक चर में वापस कर सकता हूं? – lukemh

+0

यह मेरे लिए काम नहीं कर रहा है। – lukemh

+0

@lukemh मैंने एक लंबा संस्करण जोड़ा है जो आपके लिए स्पष्ट हो सकता है। अगर यह काम नहीं करता है ... क्या आप वाकई बैश का उपयोग कर रहे हैं? यदि हां, तो कौन सा संस्करण? संस्करण 3 में आपको सशर्त अभिव्यक्ति के दाहिने तरफ एक चर में रखना होगा। –

4

मैं एक ऐसी ही सवाल था, लेकिन मैं सभी 3 क्षेत्रों के लिए उपयोग की जरूरत है। मैं अनुसंधान और परीक्षण का एक सा था और मैं यह अच्छी तरह से काम करने के लिए

product_version=$(sw_vers -productVersion) 
semver=(${product_version//./ }) 
major="${semver[0]}" 
minor="${semver[1]}" 
patch="${semver[2]}" 
echo "${major}.${minor}.${patch}" 

सीधे इस सवाल का जवाब करने के लिए मिल गया है, आप

product_version=$(sw_vers -productVersion) 
semver=(${product_version//./ }) 
major="${semver[0]}" 
minor="${semver[1]}" 
patch="${semver[2]}" 
versionShort="${major}.${minor}" 

या आप कम चर

product_version=$(sw_vers -productVersion) 
semver=(${product_version//./ }) 
versionShort="${semver[0]}.${semver[1]}" 
+1

"semver = ($ {product_version //./})" कैसे काम करता है? दुर्भाग्य से मैं semver = "10.11.6 //./" प्राप्त करता हूं जब मैं इसे आज़माता हूं। –

संबंधित मुद्दे