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 tradizionaletest
comando.[
/test
è un'utilità POSIX standard. Tutte le shell POSIX lo hanno integrato (sebbene non sia richiesto da POSIX²). Iltest
il comando imposta un codice di uscita e ilif
dichiarazione 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 eif
dichiarazione 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
if
dichiarazione 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
if
dichiarazione agisce di conseguenza.Un motivo tipico per utilizzare una subshell come questa è limitare gli effetti collaterali di
command
secommand
assegnazioni di variabili richieste o altre modifiche all'ambiente della shell. Tali modifiche non rimangono dopo il completamento della subshell. -
if command
viene eseguito il comando e il
if
l'istruzione agisce in base al suo codice di uscita.