Hallo,
Ronny Seffner ronny@seffner.de (Fr 20 Jan 2012 23:32:12 CET):
Guten Abend Heiko,
begin/end? Was ist das? Ich denke, das war Pascal, oder?
Bei "if" ist die Sache klar, if -> else, if -> fi und else -> fi sind Begrenzer von Befehlsblöcken. Ich denke aber auch schon "(" und ")" um mehrere Befehle gesetzt zu haben um diese im Zusammenhang zu betrachten. Angenommen ich will in Abhängigkeit vom Ergebnis von "test" zwei Befehle, diese aber unabhängig von deren return ausführen, da nehme ich die Klammern (quasi als begin ... end)
'[ -e &file ] && (echo "delete $file"; rm $file)' - für mich liest sich "("=begin und ")"=end ;-)
[ -e "$file" ] && (echo "delete $file"; rm "$file")
Ja, so kann man das betrachten, es gibt aber einen subtilen Unterschied zwischen ( cmd; cmd … ) und { cmd; cmd; …; }, ersteres findet in einer Subshell statt, letzteres dient nur zum Gruppieren und ist keine eigene Shell.
unset FOO; { FOO=bar; }; echo $FOO unset FOO; ( FOO=bar ); echo $FOO