So wie in Linux alles eine Datei ist, ist in Bash alles ein String.
Ja! Technisch gesehen gibt es in Bash keine Datentypen. Im Wesentlichen sind Bash-Variablen nur Zeichenfolgen.
Und das schafft ein Problem, wenn Sie versuchen, arithmetische Operationen in Bash durchzuführen. Die Zahlen, die Sie zu addieren versuchen, führen zu seltsamen Ergebnissen.
[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6
Um Strings in Bash in Integer umzuwandeln, schließen Sie sie in $((X)) ein. So:
$((string))
Wenn die Zeichenfolge eine identifizierbare Nummer hat, wird sie als Nummer behandelt. Das Beispiel, das ich oben gezeigt habe, kann wie folgt korrigiert werden:
[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
Alles, was Sie innerhalb von $((...)) tun, wird als arithmetische Operation betrachtet. Sehen wir uns die Umwandlung von Strings in Zahlen etwas detaillierter an, damit Sie arithmetische Berechnungen in Bash verwenden können.
Konvertieren von String-Variablen in Zahlen
Lassen Sie uns einige "Zahlen" deklarieren, die im Grunde Zeichenketten sind.
[email protected]:~$ a=11
[email protected]:~$ b=3
Sie können die zugewiesene Nummer überprüfen:
[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3
Versuchen wir nun, beide Zahlen zu addieren und den Wert in einer dritten Variablen c
zu speichern :
[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3
Wie Sie in der obigen Ausgabe sehen können, wird c auch als String behandelt.
Damit die Addition erfolgreich ist, müssen Sie sie durch eine arithmetische Erweiterung „umwandeln“:
[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14
Beachten Sie, dass c
ist eigentlich immer noch ein String, bis Sie implizit dieselbe arithmetische Erweiterung erneut für eine andere Operation verwenden, die ich später besprechen werde.
[email protected]:~$ c=$((5))
Das obige entspricht:
[email protected]:~$ c=5
Lassen Sie uns eine dritte Variable d
verwenden für eine andere Operation:
[email protected]:~$ d=10
All diese impliziten Deklarationen sind immer noch Strings. Es ist genauso, wie ich a
definiert hatte und b
früher.
Nun zur zweiten Operation:
[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16
Im obigen Ausdruck wird zuerst das Produkt von b und c berechnet und schließlich folgen Addition und Subtraktion.
Wie ich bereits erwähnt habe, wird alles, was Sie zwischen $((...)) tun, als arithmetische Operation betrachtet.
All diese Konvertierung funktioniert für ganze Zahlen. Es funktioniert nicht mit Fließkommazahlen, also Zahlen mit Dezimalpunkten.Versuchen Sie, echte Strings und Zahlen zu mischen
Das Mischen von Strings und Ganzzahlen ist immer noch sicherer als das Mischen von Cola und Minze. Es erzeugt jedoch ein seltsames Ergebnis.
[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3
Es funktioniert nur, wenn Zahlen (als Zeichenfolge) vorhanden sind. Wenn es sich um eine reine Zeichenfolge handelt, wird sie nicht auf magische Weise in Zahlen umgewandelt. Stattdessen wird es ignoriert, wie Sie im obigen Beispiel sehen können.
Alternative Methode:Verwenden Sie expr
Sie können auch den expr
verwenden Tool, um die Auswertung durchzuführen, aber beachten Sie, dass es sich nicht um eine „native“ Bash-Prozedur handelt, da Sie coreutils
benötigen als separates Paket installiert (standardmäßig auf Ubuntu).
[email protected]:~$ expr $a + $b \* $c - $d
16
Ich hoffe, dieses kurze kleine Tutorial hat Ihnen geholfen, Bash-Strings als Zahlen zu bewerten. Wenn Sie Fragen oder Anregungen haben, können Sie unten einen Kommentar hinterlassen.