Neben dem String vs. integer Vergleich Problem, es ist tatsächlich ein zweites Problem niemand hat darauf hingewiesen: >
nicht einmal als Vergleichsoperator behandelt werden wird, wird es als eine Ausgabe Umleitung behandelt zu werden! Zum Beispiel:
$ [ a > z ] && echo yes || echo no
yes
$ ls z
z
[ a > z ]
wird als der Testbefehl [ a ]
mit Ausgabe in eine Datei mit dem Namen „z“ umgeleitet behandelt. Der Testbefehl [ a ]
bedeutet indessen "ist 'eine' nicht leere Zeichenfolge?" Und die Antwort lautet "Ja". Nicht einmal ein bisschen nah an dem, was Sie wollten.
BTW, das bedeutet, Sie haben wahrscheinlich eine leere Datei namens "2" in was auch immer das Arbeitsverzeichnis des Skripts war.
Der richtige Weg String-Vergleich zu tun ist, um entweder Zitat oder die >
zu entkommen, oder die Verwendung bash [[ ]]
(die sauberere Syntax) anstelle des alten Stil [ ]
:
$ [ a '>' z ] && echo yes || echo no
no
$ [[ a > z ]] && echo yes || echo no
no
Und wie andere haben darauf für integer-Vergleich aus, entweder [ -gt ]
oder bash ((>))
:
$ [ 10 -gt 2 ] && echo yes || echo no
yes
$ ((10 > 2)) && echo yes || echo no
yes
für numerische Vergleiche versuchen, mit "-gt" (größer) anstelle von ">" – keras
@ Galahad19 Warum d stellst du es nicht als Antwort auf? – user8
Oh wow, das hat es behoben. Könnten Sie bitte Ihren Kommentar als Antwort hinzufügen, damit ich Ihre Antwort als Lösung setzen kann? – AnAwesomeMiner