Jsem trochu zmatený z toho, co tyto operátory dělají jinak, když jsou použity v bash (závorky, dvojité závorky, závorky a dvojité závorky).
[[ , [ , ( , ((
Viděl jsem, jak je lidé používají na příkazech if typu:
if [[condition]]
if [condition]
if ((condition))
if (condition)
Přijatá odpověď:
 V shellech podobných Bourneovi, if příkaz obvykle vypadá takto
if
   command-list1
then
   command-list2
else
   command-list3
fi
 then klauzule se provede, pokud je výstupní kód command-list1 seznam příkazů je nulový. Pokud je výstupní kód nenulový, pak else doložka je provedena. command-list1 může být
 jednoduché nebo složité. Může to být například sekvence jednoho nebo více kanálů oddělených jedním z operátorů ; , & , && , || nebo nový řádek. if níže uvedené podmínky jsou pouze speciální případy command-list1 :
-  if [ condition ][je jiný název pro tradičnítestpříkaz.[/testje standardní nástroj POSIX. Všechny shelly POSIX to mají vestavěné (ačkoli to POSIX² nevyžaduje).testpříkaz nastaví ukončovací kód aifprohlášení se podle toho chová. Typické testy jsou, zda soubor existuje nebo zda se jedno číslo rovná jinému.
-  if [[ condition ]]Toto je nová upgradovaná varianta test¹ od ksh ten bash , zsh , yash , busybox sh také podporovat. Tento[[ ... ]]konstrukt také nastavuje výstupní kód aifprohlášení se podle toho chová. Mezi jeho rozšířené funkce může testovat, zda řetězec odpovídá vzoru zástupného znaku (ne v busybox sh ).
-  if ((condition))Další ksh rozšíření, které bash a zsh také podporovat. Tím se provede aritmetika. Jako výsledek aritmetiky je nastaven výstupní kód a ifprohlášení se podle toho chová. Pokud je výsledek aritmetického výpočtu nenulový, vrátí návratový kód nula (pravda). Jako[[...]], tento formulář není POSIX, a proto není přenosný.
-  if (command)Toto spustí příkaz v podshellu. Po dokončení příkazu nastaví návratový kód a ifprohlášení se podle toho chová.Typickým důvodem pro použití takového subshell je omezení vedlejších účinků commandifcommandpožadovaná přiřazení proměnných nebo jiné změny v prostředí shellu. Takové změny nezůstanou po dokončení subshell.
-  if commandprovede se příkaz a ifpříkaz se chová podle svého výstupního kódu.