Bash Das neue Test Kommando: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 5: | Zeile 5: | ||
* Zum Beispiel müssen Sie mit "[" schreiben. | * Zum Beispiel müssen Sie mit "[" schreiben. | ||
<pre> | <pre> | ||
| − | + | [ -f "$FILE"] | |
</pre> | </pre> | ||
* um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig: | * um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig: | ||
<pre> | <pre> | ||
| − | + | [[ -f $FILE ]] | |
</pre> | </pre> | ||
* Da es sich um eine syntaktische Funktion handelt, können Sie && und || verwenden Operatoren für Boolesche Tests und <und> für Zeichenfolgenvergleiche. | * Da es sich um eine syntaktische Funktion handelt, können Sie && und || verwenden Operatoren für Boolesche Tests und <und> für Zeichenfolgenvergleiche. | ||
| Zeile 16: | Zeile 16: | ||
* Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben | * Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben | ||
<pre> | <pre> | ||
| − | + | ["$ANSWER" = y -o "$ANSWER" = yes] | |
</pre> | </pre> | ||
* Mit [[ können Sie dies als schreiben | * Mit [[ können Sie dies als schreiben | ||
<pre> | <pre> | ||
| − | + | [[ $ANSWER = ~ ^y(es)? ]] | |
</pre> | </pre> | ||
* Sie können sogar auf die erfassten Gruppen zugreifen, die in BASH_REMATCH gespeichert sind. | * Sie können sogar auf die erfassten Gruppen zugreifen, die in BASH_REMATCH gespeichert sind. | ||
| − | * Zum Beispiel wäre $ {BASH_REMATCH [1]} "es", wenn Sie oben ein vollständiges "ja" eingeben. | + | * Zum Beispiel wäre ${BASH_REMATCH [1]} "es", wenn Sie oben ein vollständiges "ja" eingeben. |
* Sie erhalten die Mustererkennung aka Globbing kostenlos. | * Sie erhalten die Mustererkennung aka Globbing kostenlos. | ||
* Vielleicht sind Sie weniger streng im Schreiben von Ja. Vielleicht bist du okay, wenn der Benutzer y-irgendetwas eingibt. Haben Sie sich versichert: | * Vielleicht sind Sie weniger streng im Schreiben von Ja. Vielleicht bist du okay, wenn der Benutzer y-irgendetwas eingibt. Haben Sie sich versichert: | ||
| − | * wenn $ ANSWER = y * | + | * wenn $ANSWER = y* |
*Reguläre Ausdrücke: Mit [[ können Sie auch reguläre Ausdrücke in Bedingungen verwenden. Zum Beispiel: | *Reguläre Ausdrücke: Mit [[ können Sie auch reguläre Ausdrücke in Bedingungen verwenden. Zum Beispiel: | ||
Aktuelle Version vom 6. Juni 2023, 13:22 Uhr
- "[[" ist Bashs Verbesserung des "[" Befehls.
- Es ist die bessere Wahl, wenn Sie Skripte schreiben, die auf Bash abzielen.
- Es ist eine syntaktische Funktion der Shell, daher weist sie ein besonderes Verhalten auf, das "[" nicht hat.
- Variablen müssen nicht mehr quotiert werden, da leere Zeichenfolgen und Zeichenfolgen mit Leerzeichen intuitiver behandelt werden.
- Zum Beispiel müssen Sie mit "[" schreiben.
[ -f "$FILE"]
- um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig:
[[ -f $FILE ]]
- Da es sich um eine syntaktische Funktion handelt, können Sie && und || verwenden Operatoren für Boolesche Tests und <und> für Zeichenfolgenvergleiche.
- [ kann dies nicht tun, da es sich um einen regulären Befehl handelt und &&, ||, <und> nicht als Befehlszeilenargumente an reguläre Befehle übergeben werden.
- Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben
["$ANSWER" = y -o "$ANSWER" = yes]
- Mit [[ können Sie dies als schreiben
[[ $ANSWER = ~ ^y(es)? ]]
- Sie können sogar auf die erfassten Gruppen zugreifen, die in BASH_REMATCH gespeichert sind.
- Zum Beispiel wäre ${BASH_REMATCH [1]} "es", wenn Sie oben ein vollständiges "ja" eingeben.
- Sie erhalten die Mustererkennung aka Globbing kostenlos.
- Vielleicht sind Sie weniger streng im Schreiben von Ja. Vielleicht bist du okay, wenn der Benutzer y-irgendetwas eingibt. Haben Sie sich versichert:
- wenn $ANSWER = y*
- Reguläre Ausdrücke: Mit [[ können Sie auch reguläre Ausdrücke in Bedingungen verwenden. Zum Beispiel:
if [[ $var =~ ^[0-9]+$ ]]; then
echo "Die Variable enthält nur Zahlen."
fi
- Hier wird der =~-Operator verwendet, um den Wert der Variable mit dem regulären Ausdruck ^[0-9]+$ abzugleichen.
- Logische Gruppierung: [[ ermöglicht die logische Gruppierung von Bedingungen mit runden Klammern. Zum Beispiel:
if | $var == "def") && $num -gt 10 ; then echo "Die Variable ist entweder 'abc' oder 'def' und die Zahl ist größer als 10." fi
- Dieser Befehl ist nicht POSIX-compliant