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.