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.