GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So werten Sie Zeichenfolgen als Zahlen in Bash aus

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.


Linux
  1. Wie debuggt man ein Bash-Skript?

  2. So vergleichen Sie Zeichenfolgen in Bash Shell-Skripten

  3. So verketten Sie Strings in Bash

  4. So überprüfen Sie, ob SMTP von der Befehlszeile aus funktioniert (Linux)

  5. Bash - So drucken Sie mehrzeilige Zeichenfolgen (mit '\n') mit printf

Bash Strings verketten

So vergleichen Sie Zeichenfolgen in Bash

So verwenden Sie bash if -z und if -n zum Testen von Zeichenfolgen in Linux

So zeigen Sie den Bash-Verlauf ohne Zeilennummern an

So führen Sie ein Bash-Skript aus

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell