staging.inyokaproject.org

TCL: Min Version finden

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

joma1234

Anmeldungsdatum:
2. Juli 2019

Beiträge: Zähle...

Hallo miteinander,

ich habe ein TCL script, welches auf eine Min-Version prüft. Möglich Versionsnummer sind:

v1.0.0
v0.10.1
v0.9.6
v0.9.7
v0.9.7p1
v0.9.7p2

Gilt: v1.0.0 > v0.10.1 > v0.9.7p2 > v0.9.7p1 > v0.9.7 > v0.9.6

Wenn ich angebe meine Min-Version soll v0.9.7.p2 sein, dann möchte ich mir dass v0.9.7p1 & v0.9.7 & v0.9.6 reportet wird. Wie kann ich das machen?

Vielen Dank schon mal im Vorraus

Bearbeitet von rklm:

Formatierung

Bearbeitet von sebix:

Versionsangabe korrigert.

Bearbeitet von sebix:

Programmiersprache im Titel ergaenzt

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Kenne TCL nicht. Mit der Shell könnte man mit so etwas arbeiten:

1
2
3
4
5
6
7
8
9
$ sort --version-sort v | sed -ne '1,/v0.9.7p2/p'
v0.9.6
v0.9.7
v0.9.7p1
v0.9.7p2
$ sort --version-sort v | sed '/v0.9.7p2/,$d'
v0.9.6
v0.9.7
v0.9.7p1

Schönheitsfehler ist, dass beide Varianten davon abhängen, dass die angegebene Versionsnummer wirklich auftaucht. Robuster wäre es einen Vergleich der einzelnen Felder zu machen. In Ruby ginge das z.B. so

1
2
3
4
$ ruby -ne 'BEGIN {$v=[0,9,7,2]}; vv=$_.scan(/\d+/).map(&:to_i); puts $_ if (vv <=> $v) < 0' v
v0.9.6
v0.9.7
v0.9.7p1

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Du könnntest eine Version mit einschmuggeln, die es garantiert nicht gibt, und die hart an der Grenze ist, hier 0.9.7p2.0000. Der erste Teil meines Demos wäre bei Dir wohl ein Kommando, dass Dir eine Liste an Versionsnummern liefer - bei Dir sicher kein echo-Befehl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
echo "v1.0.0
v0.10.1
v0.9.6
v0.9.7
v0.9.7p1
v0.9.7p2" | cat - <(echo v0.9.7p2.0000) | sort -V | sed '/0.9.7p2.0000/,$d' 
v0.9.6
v0.9.7
v0.9.7p1
v0.9.7p2

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 138

Eine kleine Nebenbemerkung. GNU sed kennt den Befehl Q.

sed '/v0\.9\.7p2/Q'

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

schragge schrieb:

Eine kleine Nebenbemerkung. GNU sed kennt den Befehl Q.

sed '/v0\.9\.7p2/Q'

Womit wir wieder bei rklms Schönheitsfehler sind.

Antworten |