Prawdopodobnie znasz tę bombę widelcową :
:(){ :|:&};: #WARNING: harmful code
Zastanawiam się, dlaczego konieczne jest, aby parsować, aby wstawić spację po otwierającym nawiasie klamrowym.
shell-script
Benoit
źródło
źródło
Myślę, że @ rush może udzielić tutaj poprawnej, jeśli wprowadzającej w błąd odpowiedzi. Widelec-bomba definiuje funkcję o nazwie „
:
”. Kod w nawiasach klamrowych nie jest wykonywany, dopóki funkcja nie zostanie wywołana przez końcowe „:
”. Tak więc nawiasy klamrowe jako grupa poleceń i nawiasy klamrowe jako ciało funkcyjne są składniowo takie same, ale mają inną semantykę.Z tego samego dokumentu co przywołuje @rush:
źródło
function_body
to acompound_command
(plus opcjonalneredirect_list
). Spacja jest potrzebna, ponieważ{
jest to słowo zastrzeżone, a nie znak specjalny.brace_group
zachowują się inaczej, gdy są częścią funkcji, a kiedy nie. Użyłem grupowania poleceń, aby opisać ten ostatni przypadek, i to właśnie opisano w linku Rusha.{
nie jest operatorem, lecz słowem zastrzeżonym, a słowa należy oddzielić od innych słów, aby można je było uznać za odrębne.