Der darin enthaltene Code wird { ... }
genau so ausgeführt, wie er ohne die geschweiften Klammern ausgeführt worden wäre, außer dass er jetzt vom Exit-Status von abhängt get_confirm
.
Wenn get_confirm
Exits mit einem Exit-Status von Null ("Erfolg") beendet werden, wird der Block ausgeführt, andernfalls nicht.
Es ist gleichbedeutend mit
if get_confirm; then
# the contents of the block goes here
fi
(was ich denke sieht schöner aus)
Das Beispiel des Buches ist meiner Meinung nach kein gutes Beispiel für eine häufige Verwendung von { ... }
. Ein besseres Beispiel wäre gewesen
{ echo 'hello world'; date; } >file
Dabei wird eine einzige Umleitung verwendet, um die Standardausgabe beider Befehle im { ... }
Block in dieselbe Datei umzuleiten .
Dies ist ähnlich (und hat in diesem Fall den gleichen Effekt wie)
( echo 'hello world'; date ) >file
Die Anweisungen in werden jedoch { ... }
in derselben Umgebung wie die Shell ausgeführt, während die Anweisungen in ( ... )
in einer Subshell (einer separaten Umgebung) ausgeführt werden.
Sie können den Unterschied mit sehen
{ a=42; }; echo $a
und
( a=1973 ); echo $a
Der erste wird ausgegeben, 42
während der zweite nicht ausgegeben wird 1973
(die Zuweisung erfolgt in einer Unterschale und kann die Umgebung außerhalb nicht beeinflussen).
Hinweis zur Grammatik: Das Schließen }
eines { ... }
Blocks muss nach einer neuen Zeile oder a erfolgen ;
. { echo 'hello' }
ist nicht gültig, während beide { echo 'hello'; }
und
{
echo 'hello'
}
sind.