Você provavelmente conhece essa bomba de garfo :
:(){ :|:&};: #WARNING: harmful code
Eu me pergunto por que é necessário, para analisar, incluir um espaço após a chave de abertura.
shell-script
Benoit
fonte
fonte
Acho que @rush pode estar dando uma resposta correta, se enganosa aqui. O fork-pump define uma função chamada "
:
". O código entre chaves não é executado até que a função seja chamada pelo final ":
". Portanto, os chavetas como agrupamento de comandos e as chavetas como corpo da função são sintaticamente iguais, mas têm semânticas diferentes.Do mesmo documento que o @rush cita:
fonte
function_body
é acompound_command
(mais um opcionalredirect_list
). O espaço é necessário porque{
é uma palavra reservada, não um caractere especial.brace_group
se comportam de maneira diferente quando fazem parte de uma função e quando não. Eu estava usando o agrupamento de comandos para descrever o último caso e foi o que foi descrito no link do rush.{
é que não é um operador, mas uma palavra reservada, e as palavras precisam ser separadas de outras palavras para serem consideradas distintas.