GNU/Linux >> Znalost Linux >  >> Linux

Příkaz blokuje mechanismus ve skriptování Shell?

V části Začátek programování Linuxu rezervovat. Je zde část o bloku výpisů . V této části vysvětlení vypadá následovně.

Bloky příkazů

Pokud chcete použít více příkazů na místě, kde je povolen pouze jeden, například v seznamu AND nebo OR,
můžete tak učinit tak, že je uzavřete do složených závorek {} a vytvoříte tak blok příkazů. Viz například následující kód:

get_confirm && {
    grep −v "$cdcatnum" $tracks_file > $temp_file 
    cat $temp_file > $tracks_file
    echo
    add_record_tracks
}

Vysvětlete prosím, jak se kód spouští v bloku příkazů…

Přijatá odpověď:

Kód v rámci { ... } spustit přesně tak, jak by se provedl bez složených závorek, kromě toho, že nyní závisí na stavu ukončení get_confirm .

Pokud get_confirm opustí s nulovým stavem ukončení („úspěch“), blok se provede, jinak ne.

Je to ekvivalentní s

if get_confirm; then
    # the contents of the block goes here
fi

(což si myslím, že vypadá lépe)

Příklad knihy není IMHO dobrým příkladem běžného použití { ... } . Lepší příklad by byl

{ echo 'hello world'; date; } >file

který používá jediné přesměrování k přesměrování standardního výstupu obou příkazů v { ... } blokovat do stejného souboru.

To je podobné (a má v tomto případě stejný účinek jako)

( echo 'hello world'; date ) >file

ale příkazy v rámci { ... } se provádí ve stejném prostředí jako shell, zatímco příkazy v ( ... ) spouští se v podshell (samostatné prostředí).

Rozdíl můžete vidět pomocí

{ a=42; }; echo $a

a

( a=1973 ); echo $a

První vypíše 42 zatímco druhý nevypíše 1973 (přiřazení probíhá v podskořápce a nemůže ovlivnit vnější prostředí).

Poznámka o gramatice:Závěrka } z { ... } blok musí následovat nový řádek nebo ; . { echo 'hello' } není platný, zatímco oba { echo 'hello'; } a

{ 
    echo 'hello'
}

jsou.


Linux
  1. Deskriptory souborů a skriptování prostředí?

  2. Mám používat skriptování Apt nebo Apt-get In Shell?

  3. Jak porovnávat řetězce ve skriptování Bash Shell

  1. Zobrazování obsahu nejvyšší hodnoty ve skriptování Shell?

  2. Jak analyzovat Json pomocí skriptování Shell v Linuxu?

  3. Symbol backtick (`) v Linux Shell Scripting

  1. Skriptování Linuxu:hexadecimální číslo na binární řetězec

  2. Najít a nahradit ve skriptování shellu

  3. Co je use() ve skriptování shellu?