seu script está incompleto, pois ele está perdendo a terminação EOF literal.
Eu tento explicar o roteiro:
a primeira linha simplesmente atribui "olá" à variável string .
string="hello"
a segunda linha inicia o comando ed e alimenta (via stdin ) as linhas a seguir até encontrar o EOF literal ( << foo significa: as linhas a seguir até que foo sejam redirecionadas para o stdin )
ed << EOF
as seguintes linhas são comandos ed .
abra um arquivo chamado * any_file * ( e any_file ) e insira 1i da string ${string} (isso será expandido para "olá").
mas, como você está sem a terminação EOF literal, o redirecionamento de stdin gera um erro.