[

[

Als sehr verwirrter Neuling, was ist los mit demWENNAussage und[ ], [[ ]], ( ), (( ))

warum ist

if [ $jengnr -eq 1 ]; then

richtig, aber hier ist es doppelt:

if [[ -f "$jdir$object.eng.dat" ]]; then

und dann habe ich gelesen, dass ein verschachteltes if innerhalb eines if (( )) sein sollte (nicht mein Code)

#!/bin/bash
# Nested if statements
if [ $1 -gt 100 ]
then
echo Hey that\'s a large number.
if (( $1 % 2 == 0 ))
then
echo And is also an even number.
fi
fi

aber ich habe [[ ]] in einer if-Anweisung verwendet, die sich innerhalb einer if-Anweisung [[ ]] befand, und das hat auch funktioniert?

Kann jemand bitte erklären, was, wer und warum es vier verschiedene Wenns gibt?

.. und wann verwendet man sie richtig?

Antwort1

[

Dies ist der Shell-Testbefehl (manchmal auch ein integrierter Befehl) und eine portable Methode zum Durchführen von Shell-Tests.

[[

Dies wird oft als "erweiterter Test" bezeichnet, wird meist nur von ksh und bash unterstützt und bietet mehr Funktionen als der Shell-Test, ist aber nicht so portabel

(

Dies ist überhaupt kein Testbefehl, eine einzelne Klammer erstellt eine Untershell. if-Anweisungen werten einfach den Rückgabecode des ihnen folgenden Befehls aus, daher if ( command ); thenwürde „using“ funktionieren, würde aber einfach die Rückgabe der Untershell auswerten.

((

Dies ermöglicht Shell-Arithmetik, die in Verbindung damit verwendet werden kann, ifwenn Sie arithmetikbezogene Bedingungen testen.


Beachten Sie außerdem, dass es für verschachtelte if-Anweisungen keine solche Regel gibt. Sie können jede beliebige Kombination dieser Methoden auf jeder Verschachtelungsebene verwenden.

verwandte Informationen