Quando o shell lê o script de shell, seu código de varredura aceita a última palavra no final do script, mesmo que não exista uma nova linha final.
Este é o efeito da primeira regra no padrão POSIX sobre como o shell deve reconhecer tokens em sua entrada :
If the end of input is recognized, the current token (if any) shall be delimited.
O fato de dizer que o token atual é delimitado aqui significa que a última palavra no script, juntamente com o restante dessa linha não terminada, será aceita como entrada para o intérprete, em vez de causar um erro ou colocar o shell em um estado indefinido.
Nos comentários, é feita uma referência ao editor vi
. Um editor padrão vi
tem permissão para editar um arquivo cuja última linha não seja terminada por uma nova linha. No entanto, ele terminará a última linha do buffer com uma nova linha ao gravá-la em um arquivo (exceto ao salvar um arquivo vazio, caso em que incluir uma nova linha será explicitamente não permitido). Isso também é verdade para um editor padrão ex
:
INPUT FILES
Input files shall be text files or files that would be text files except for an incomplete last line that is not longer than
{LINE_MAX}-1
bytes in length and contains noNUL
characters. By default, any incomplete last line shall be treated as if it had a trailing<newline>
. The editing of other forms of files may optionally be allowed byex
implementations.
O editor vim
tem uma configuração, eol
, que determina se deve preservar a última linha não terminada ou não. O comportamento padrão é finalizar a última linha. Veja :help eol
em vim
.
A entrada para o editor padrão ed
deve ser um arquivo de texto, o que significa que o que acontece se você estiver editando um arquivo cuja última linha não foi terminada corretamente (o que não faz com que seja um arquivo de texto) não é tecnicamente especificado . No OpenBSD, o editor ed
dirá "newline appended" ao abrir um arquivo de texto não finalizado.
INPUT FILES
The input files shall be text files.