Um possível motivo: você tem um caracter inválido, acidentalmente adicionado ao criar o arquivo. Teria que ser algo que normalmente não é (muito) visível, por exemplo, um espaço sem quebra ou algum tal.
$ cat test.csh
set foo = bar
$ tcsh test.csh
set: Variable name must begin with a letter.
$ od -c test.csh
0000000 s e t 342 201 240 f o o = b a r
0000020 \n
0000021
Esse era um marceneiro de palavras de largura zero, que na verdade não é impresso no meu sistema.
Algo assim od
acima deve mostrar o que realmente existe.
A maneira mais fácil de se livrar de caracteres como esse é, provavelmente, apenas encontrar a (s) linha (s) ofensiva (s) a partir das mensagens de erro e redigitá-las do zero. (ou depuração de impressões em vez de mensagens de erro, já que tcsh
não parece dar números de linha neles. oh bem.)
Mas se você quiser, pode canalizar todo o arquivo por meio de algo como tr -d '0-7'
, o que removeria todos os bytes com o bit alto definido. (Isto é, assumindo que o arquivo é codificado em UTF-8, e que tr
funciona como parece funcionar em meu sistema, em bytes, não em caracteres reais, e que não há nenhum outro caracteres não-ASCII que você gostaria de manter. Faça backups.)