2014-01-22 10 views
11

Gibt es in Bash eine einfache Möglichkeit zu testen, ob eine Zeichenfolge lexikografisch kleiner oder gleich einer anderen ist?Wie testen Strings für weniger als oder gleich?

Ich weiß, was Sie tun können:

if [[ "a" < "b" ]] 

für strenge Ungleichheit zu testen, oder

if [[ 1 -le 1 ]] 

für Zahlen. Aber -le scheint nicht mit Zeichenfolgen zu funktionieren, und <= gibt einen Syntaxfehler.

+0

Verwenden Sie "vergleichen", um dies zu testen. –

+1

@WilliamMorrison Auf meinem Debian 'compare' ist ein ImageMagick Befehl (für Bildverarbeitung/diffing). – bryn

+0

@bryn muss diese sehr generischen ImageMagick Befehlsnamen "lieben" :-) –

Antwort

23

einfach negieren die größer ist als Test:

if [[ ! "a" > "b" ]] 
6

Sie benötigen || mit einer zusätzlichen Bedingung zu verwenden, anstatt <=:

[[ "$a" < "$b" || "$a" == "$b" ]] 
+0

Gibt es einen POSIX Weg? –

+1

Verwenden Sie '[! "$ a" -gt "$ b"] 'in POSIX – anubhava

+5

Ist '-gt' nicht nur für ganze Zahlen? –

1

Sie können den Vergleich Flip und Zeichen um und Test negativ:

$ a="abc" 
$ b="abc" 
$ if ! [[ "$b" > "$a" ]] ; then echo "a <= b" ; fi 
a <= b 

Wenn Sie Sequenz sortieren möchten von "A" dann "a" dann "B" ... verwenden:

shopt -s nocaseglob 
Verwandte Themen