Sono un po' confuso su cosa fanno questi operatori in modo diverso se usati in bash (parentesi, parentesi quadre, parentesi e parentesi doppie).
[[ , [ , ( , ((
Ho visto persone usarli su affermazioni if come questa :
if [[condition]]
if [condition]
if ((condition))
if (condition)
Risposta accettata:
Nelle shell tipo Bourne, un if di solito assomiglia a
if
command-list1
then
command-list2
else
command-list3
fi
Il then La clausola viene eseguita se il codice di uscita di command-list1 l'elenco dei comandi è zero. Se il codice di uscita è diverso da zero, allora else la clausola viene eseguita. command-list1 può essere
semplice o complesso. Può essere, ad esempio, una sequenza di una o più pipeline separate da uno degli operatori ; , & , && , || o nuova riga. Il if le condizioni mostrate di seguito sono solo casi speciali di command-list1 :
-
if [ condition ][è un altro nome per il tradizionaletestcomando.[/testè un'utilità POSIX standard. Tutte le shell POSIX lo hanno integrato (sebbene non sia richiesto da POSIX²). Iltestil comando imposta un codice di uscita e ilifdichiarazione agisce di conseguenza. I test tipici sono se un file esiste o un numero è uguale a un altro. -
if [[ condition ]]Questa è una nuova variante aggiornata su
test¹ da ksh che bash , zsh , sì , casella occupata anche supporto. Questo[[ ... ]]build imposta anche un codice di uscita eifdichiarazione agisce di conseguenza. Tra le sue funzionalità estese, può verificare se una stringa corrisponde a un modello di caratteri jolly (non in busybox sh ). -
if ((condition))Un altro ksh estensione che bash e zsh anche supporto. Questo esegue l'aritmetica. Come risultato dell'aritmetica, viene impostato un codice di uscita e il
ifdichiarazione agisce di conseguenza. Restituisce un codice di uscita pari a zero (vero) se il risultato del calcolo aritmetico è diverso da zero. Come[[...]], questo modulo non è POSIX e quindi non è portatile. -
if (command)Questo esegue il comando in una subshell. Al termine del comando, imposta un codice di uscita e il
ifdichiarazione agisce di conseguenza.Un motivo tipico per utilizzare una subshell come questa è limitare gli effetti collaterali di
commandsecommandassegnazioni di variabili richieste o altre modifiche all'ambiente della shell. Tali modifiche non rimangono dopo il completamento della subshell. -
if commandviene eseguito il comando e il
ifl'istruzione agisce in base al suo codice di uscita.