Wie vergleicht man zwei Variablen, die IPv6-Adressen enthalten?

Wie vergleicht man zwei Variablen, die IPv6-Adressen enthalten?

Ich muss zwei Variablen mit IPv6 vergleichen, also gibt es sowohl Zeichenfolgen als auch Ganzzahlen.

Ich habe es wie folgt versucht:

if [[ "$ipvsrc" -eq "$ipvdst" ]];
       then echo -e "Value OK";  fi

Die Fehlerausgabe war:

line 7: [[: 2a00: value too great for base (error token is "2a00")

Dann:

if [ $ipvsrc -eq $ipvdst];
       then echo -e "Value OK";  fi

Die Fehlerausgabe war:

line 7: [: 2a00:0da9:000a:2010:1fc:0:2174:1951: integer expression expected

Dann:

if [[ "$ipvsrc" == "$ipvdst" ]];
       then echo -e "Value OK";
fi

Ausgabe: keine

Variablen werden wie folgt gesetzt:

ipvsrc=$(cat config_src | grep ipvsrc |grep -v localhost | cut -d '=' -f2);

ipvdst=$(cat config_dst | grep -i ipvdst | cut -d '=' -f2);

Irgendwelche Tipps, meine Herren, wie man das gewünschte Ergebnis erzielt? Vielen Dank, Prost!

Antwort1

Ihr letztes Beispiel ist korrekt (vorausgesetzt, Sie verwenden eine Shell wie bashoder ksh93die versteht [[ ... ]], aber anscheinend ist das der Fall):

if [[ "$ipvsrc" == "$ipvdst" ]]; then
    echo "Value OK";
fi

Die beiden Variablen, die Sie vergleichen, enthalten Zeichenfolgen. Daher ==ist es richtig, sie in Anführungszeichen zu setzen und zu verwenden.

Der Grund, warum Sie keine Ausgabe erhalten, liegt wahrscheinlich einfach darin, dass der Vergleich falsch ausgewertet wird, d. h. dass die beiden Zeichenfolgen nicht identisch sind.

Leider kenne ich den Inhalt von nicht config_{src,dst}und kann daher nicht sagen, welche Werte die beiden Variablen wahrscheinlich haben oder ob sie gleich oder unterschiedlich sein sollten.

verwandte Informationen