-
Está aguardando o fechamento de
}
. Você inseriu uma lista com um comando,date }
e uma nova linha, então você ainda está dentro do grupo de comando e pode adicionar outro comando à lista ou finalizá-lo.Portanto, não está aguardando a entrada padrão (exatamente), está aguardando que você conclua o comando iniciado na primeira linha. Se você inserir
}
aqui, você (provavelmente) obterá um erro do comandodate
dizendo que não entende "}
". -
{
e}
são argumentos válidos para comandos comuns, como visto no ponto 1. Por exemplo,find
usa{}
como argumento.Especificamente, apenas exatamente "
{
" e "}
" são palavras reservadas . As palavras reservadas na concha só importam quando são dadas exatamente como uma palavra inteira, e apenas onde são especificamente esperadas. O lugar mais importante que eles esperam é no início de um comando.O ponto e vírgula ou nova linha significa que
}
aparece no início do próximo comando na lista, onde pode ser reconhecido como uma palavra reservada e dado seu tratamento especial. Este é especificado por POSIX para a gramática de shell :This rule also implies that reserved words are not recognized except in certain positions in the input, such as after a
<newline>
or<semicolon>
; the grammar presumes that if the reserved word is intended, it is properly delimited by the userSeria irritante se "then", outra palavra reservada, não pudesse ser usada como uma palavra normal, de modo que basicamente faz sentido.
(
e)
, por outro lado, são operadores, podem aparecer em qualquer lugar e precisam ser ignorados se forem usados para seus valores literais. Este é essencialmente um artefato histórico, e dado um repasse talvez uma escolha mais consistente seria feita em uma direção ou outra, ou talvez um analisador mais complexo seria mandado.
Para o Bash em particular, chaves para agrupamento de comandos também precisam ser distinguidas de chaves para brace expansion , e o analisador faz uma suposição de que é improvável que você esteja expandindo o comando que começa com um espaço.
Existe a opção de manter ou não a compatibilidade histórica de caso de canto, e alguns outros shells, como zsh, possuem analisadores mais inteligentes e são capazes de lidar com { date }
com o significado pretendido.