Bash/Arithmetische Substitution: Unterschied zwischen den Versionen
| Zeile 4: | Zeile 4: | ||
Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Ersetzung des Ergebnisses. | Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Ersetzung des Ergebnisses. | ||
; Format | |||
$((AUSDRUCK)) | $((AUSDRUCK)) | ||
Aktuelle Version vom 5. November 2025, 15:20 Uhr
Bash/Arithmetische Substitution
Beschreibung
Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Ersetzung des Ergebnisses.
- Format
$((AUSDRUCK))
Der Ausdruck wird so behandelt, als stünde er in doppelten Anführungszeichen, aber ein doppeltes Anführungszeichen innerhalb der Klammern wird nicht speziell behandelt.
Alle Token im Ausdruck durchlaufen eine Parametererweiterung, Befehlssubstitution und Entfernung von Anführungszeichen. Arithmetische Substitutionen können verschachtelt sein.
Die Auswertung arithmetischer Ausdrücke erfolgt in Ganzzahlen fester Breite ohne Überlaufprüfung – Division durch Null wird jedoch abgefangen und als Fehler erkannt.
Die Operatoren entsprechen in etwa denen der Programmiersprache C. In der Reihenfolge abnehmender Priorität sieht die Liste wie folgt aus:
Shell-Variablen sind als Operanden zulässig; die Parametererweiterung wird vor der Auswertung des Ausdrucks durchgeführt.
Innerhalb eines Ausdrucks können Shell-Variablen auch ohne Verwendung der Parametererweiterungssyntax mit ihrem Namen referenziert werden.
Der Wert einer Variablen wird bei ihrer Referenzierung als arithmetischer Ausdruck ausgewertet. Eine Shell-Variable muss nicht über das Attribut „integer” verfügen, um in einem Ausdruck verwendet werden zu können.
Konstanten mit einer führenden 0 (Null) werden als Oktalzahlen interpretiert. Ein führendes „0x” oder „0X” bezeichnet Hexadezimalzahlen. Andernfalls haben Zahlen die Form „[BASE'#‚]N“, wobei „BASE“ eine Dezimalzahl zwischen 2 und 64 ist, die die arithmetische Basis darstellt, und N eine Zahl in dieser Basis ist.
Wenn „BASE‘#'“ weggelassen wird, wird die Basis 10 verwendet. Ziffern größer als 9 werden durch Kleinbuchstaben, Großbuchstaben, „@“ und „_“ in dieser Reihenfolge dargestellt.
Wenn „BASE“ kleiner oder gleich 36 ist, können Klein- und Großbuchstaben austauschbar verwendet werden, um Zahlen zwischen 10 und 35 darzustellen.
Operatoren werden in der Reihenfolge ihrer Priorität ausgewertet. Unterausdrücke in Klammern werden zuerst ausgewertet und können die oben genannten Prioritätsregeln außer Kraft setzen.
Wenn möglich, sollten Bash-Benutzer versuchen, die Syntax mit eckigen Klammern zu verwenden:
$[ AUSDRUCK ]
Dies berechnet jedoch nur das Ergebnis von „AUSDRUCK“ und führt keine Tests durch:
echo $[365*24] 8760
- Eingebauten Rechenoperationen
| VAR++ and VAR-- | variable post-increment and post-decrement |
| ++VAR and --VAR | variable pre-increment and pre-decrement |
| + - | Einstelliger Operator (Vorzeichen) |
| ! ~ | Logische und bitweise Negation |
| ** | Exponentialfunktion |
| * / % | Multiplikation, Division und Modulo-Operator |
| + - | Addition, Subtraktion |
| << >> | Bitweise Links-/Rechtsverschiebung |
| <= >= < > | Vergleiche |
| == != | Gleichheit und Ungleichheit |
| & | Bitweises UND |
| ^ | Bitweises Exclusive ODER |
| | | Bitweises ODER |
| && | Logisches UND |
| '''|| ''' | Logisches ODER |
| expr ? expr : expr | Bedingte Zuweisung |
| =, *=, /=, %=, +=, -= <<=, >>=, &=, ^=, |= | Zuweisungen |
| , | separator between expressions |
Als Operanden sind Konstanten und Shellvariablen (deren Inhalt als long integer betrachtet wird) erlaubt. Beginnt eine Konstante mit "0", dann wird sie als oktale Zahl verstanden; steht "0x" am Anfang, handelt es sich um eine hexadezimale Konstante.
Konstanten können zu jeder Basis zwischen 2 und 64 angegeben werden, so kann die Zahl 63 u.a. wie folgt dargestellt werden:
- Zur Basis 10: 10#63
- Zur Basis 8: 8#77
- Zur Basis 16: 16#3f
Die arithmetische Substitution ist der gebräuchliche Weg, um Berechnungen durchzuführen:
- Bash Versionen <2: Der zu berechnende Ausdruck wird in eckigen Klammern geschrieben: $[...]
- Bash ab Version 2: Der zu berechnende Ausdruck wird in doppelte runde Klammern geschrieben: $((...)) (die alte Syntax wird weiterhin unterstützt)
Aufruf
Optionen
| Unix | GNU | Parameter | Beschreibung |
|---|---|---|---|
Parameter
Umgebungsvariablen
Exit-Status
| Wert | Beschreibung |
|---|---|
| 0 | Erfolg |
| >0 | Fehler |
Anwendung
b=5; b=$((b+1)); echo $b
6
a=$((b+=10)); echo $a
16
echo $((a>b?1:0))
1
echo $((8#17**2))
225
echo $((017**2))
225
echo $((-0x64*3#11%6))
-4
echo $((4<<1))
8
Wird als Operand eine Variable benutzt, so wird versucht, deren Inhalt in eine Ganzzahl zu konvertieren. Enthält die Variable keine Zahl, wird der Inhalt zu "0" konvertiert:
b="Ist b keine Zahl, wird b zu 0 konvertiert"
echo $b Ist b keine Zahl, wird b zu 0 konvertiert
b=$(($b+1)); echo $b
1
Konfiguration
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks