
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 ); then
wü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, if
wenn 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.