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.