2014-06-20 6 views
7

Ich habe folgendes passenbash regex semantische Versionsnummer

10.9.2 
10.9.5 

aber es wird

10.10.3 

nicht übereinstimmen, wie es wird nur

zurückgeben

aber ich möchte, dass die versionShort zu

10.10 

gesetzt werden Ich wünsche die Hauptversion übereinstimmen, den ersten Punkt und die kleinere Version, wie oben.

Antwort

10

Regexpless Lösung - abgeschnitten letzter Punkt und was folgt:

versionShort=${versionNumber%.*} 
2

Regexp Lösung:

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

Es wird immer zuerst zwei Zahlen drucken, zum Beispiel all dieser:

10.5 
10.5.9 
10.5.8.2 

führt zu 10.5 Ausgabe. Sie können auch eine else-Klausel hinzufügen, um zu überprüfen, ob etwas falsches passiert ist (keine Übereinstimmung gefunden). Hier

ist eine längere Version:

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

verwenden können, wie gebe ich das Ergebnis an eine Variable zurück? – lukemh

+0

das funktioniert nicht für mich. – lukemh

+0

@lukemh Ich habe eine längere Version hinzugefügt, die für dich klarer sein könnte. Wenn es nicht funktioniert ... Bist du sicher, dass du Bash benutzt? Wenn ja, welche Version? In Version 3 müssen Sie die rechte Seite des bedingten Ausdrucks in eine Variable einfügen. –

4

Ich hatte eine ähnliche Frage, aber ich brauchte Zugang zu allen drei Segmenten. Ich habe ein wenig Forschung und Prüfung, und ich fand das gut zu funktionieren

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

diese Frage direkt zu beantworten, könnten Sie

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

oder Sie weniger Variablen

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

Wie funktioniert "sverver = ($ {product_version //./})"? Ich bekomme leider smerver = "10.11.6 //./" wenn ich das versuche. –