GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi operátory Bash [[ Vs [ Vs ( Vs ((?

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 :

  1. if [ condition ]

    [ je jiný název pro tradiční test příkaz. [ / test je standardní nástroj POSIX. Všechny shelly POSIX to mají vestavěné (ačkoli to POSIX² nevyžaduje). test příkaz nastaví ukončovací kód a if prohlášení se podle toho chová. Typické testy jsou, zda soubor existuje nebo zda se jedno číslo rovná jinému.

  2. 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 a if prohláš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 ).

  3. 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 if prohláš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ý.

  4. if (command)

    Toto spustí příkaz v podshellu. Po dokončení příkazu nastaví návratový kód a if prohlášení se podle toho chová.

    Typickým důvodem pro použití takového subshell je omezení vedlejších účinků command if command požadovaná přiřazení proměnných nebo jiné změny v prostředí shellu. Takové změny nezůstanou po dokončení subshell.

  5. if command

    provede se příkaz a if příkaz se chová podle svého výstupního kódu.

Související:jak mohu použít bash jako přihlašovací shell, když mi sysadmin odmítne dovolit to změnit?


Linux
  1. Rozdíl mezi vestavěným příkazem a příkazem, který není?

  2. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  3. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  1. Jaký je rozdíl mezi příkazem locate a find v Linuxu

  2. Jaký je rozdíl mezi použitím _exit() &exit() v konvenčním linuxovém fork-exec?

  3. Jaký je rozdíl mezi prováděním skriptu Bash a jeho získáváním?

  1. Rozdíl mezi ‚A‘ na příkazovém řádku (bash)??

  2. Příkaz „eval“ v Bash?

  3. Co dělá -e v bash shebang?