No mundo unix, uma nova linha é um terminador de linha, não um separador de linha. Um arquivo de texto consiste em uma série de linhas, cada uma das quais é terminada por um caractere de nova linha. Esse é um caractere de avanço de linha (número de caractere 10, que pode ser representado como LF , ^J , 2 , \x0a , \n ,…). Veja Qual é o objetivo de adicionar uma nova linha ao final de um arquivo?
Em particular, todo arquivo de texto não vazio termina com um caractere de nova linha. O Windows às vezes funciona de maneira diferente: em alguns aplicativos, (mas nem todos! O Windows não é consistente), uma seqüência CR LF (retorno de carro, alimentação de linha, também conhecido como ^M^J , 52 , \x0d\x0a , \r\n ,…) separa linhas, portanto, um arquivo que termina em CRLF é um arquivo que termina em uma linha em branco. Portanto, tenha cuidado ao usar um editor do Windows para editar arquivos que devem ser usados no futuro:
- Eles adicionam esse caractere CR extra antes do caractere de nova linha, que alguns aplicativos Unix (em especial shells) tratam como um caractere comum, parte da linha.
- Eles fazem você acreditar que há uma linha em branco após o último caractere de nova linha, enquanto a última nova linha termina a última linha.
Se um arquivo não estiver vazio e não terminar em uma nova linha, não será um arquivo de texto unix bem formado. Alguns aplicativos reagem ignorando a última linha parcial ou truncando-a. É o que está acontecendo aqui: você passou um arquivo de texto incompleto para o bash e está ignorando a última linha incompleta.