Bash Das neue Test Kommando: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „*"" ist Bashs Verbesserung des "[" Befehls. *Es ist die bessere Wahl, wenn Sie Skripte schreiben, die auf Bash abzielen. Meine Favoriten sind: *Es ist eine…“)
 
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
*"[[" ist Bashs Verbesserung des "[" Befehls.  
+
* "[[" ist Bashs Verbesserung des "[" Befehls.  
*Es ist die bessere  Wahl, wenn Sie Skripte schreiben, die auf Bash abzielen. Meine Favoriten sind:
+
* 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.
+
* 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.  
+
* Variablen müssen nicht mehr quotiert werden, da leere Zeichenfolgen und Zeichenfolgen mit Leerzeichen intuitiver behandelt werden.  
*Zum Beispiel müssen Sie mit "[" schreiben.
+
* Zum Beispiel müssen Sie mit "[" schreiben.
 
<pre>
 
<pre>
if [ -f "$ FILE"]
+
[ -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>
if [[ -f $ FILE ]]
+
[[ -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.  
*[ kann dies nicht tun, da es sich um einen regulären Befehl handelt und &&, ||, <und> nicht als Befehlszeilenargumente an reguläre Befehle übergeben werden.
+
* [ 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
+
* Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben
 
<pre>
 
<pre>
if ["$ ANSWER" = y -o "$ ANSWER" = yes]
+
["$ANSWER" = y -o "$ANSWER" = yes]
 
</pre>
 
</pre>
*Mit [[ können Sie dies als schreiben
+
* Mit [[ können Sie dies als schreiben
 
<pre>
 
<pre>
if [[ $ ANSWER = ~ ^ y (es)? ]]
+
[[ $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:
 +
 
 +
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 == "abc" || $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

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