Eu não acho que isso tenha algo a ver com o shell C - e, de fato, como observado nos comentários, o que você tem é um script sed (um arquivo de texto simples de sed
comandos) em vez de um shell script, e o #!/bin/csh -f
shebang é supérfluo e será tratado (por sed) como um simples comentário.
O que você parece estar observando é que sed
aparece para não reavaliar o endereço $
(última linha), de modo que se um dos seus comandos anteriores apagar o último linha do arquivo, em seguida, uma tentativa subseqüente de anexar 1 após esse endereço falhar. Podemos ver isso com um teste simples (usando o bash
shell, pelo que vale a pena) da seguinte forma:
# delete line 3 then append after $
$ printf 'line %d\n' {1..3} | sed -e '/3/d' -e '$a\new line'
line 1
line 2
enquanto
# append after $ then delete line 3
$ printf 'line %d\n' {1..3} | sed -e '$a\new line' -e '/3/d'
line 1
line 2
new line
Acho isso um tanto surpreendente, mas não sei se é o comportamento desejado ou deveria ser considerado um bug.
Nota:
[1] Tecnicamente, o comando a
não é anexado, mas sim
Fila [s] as linhas de texto que se seguem [...] para serem impressas no final do ciclo atual, ou quando a próxima linha de entrada é lida.