"$(cat "$logfile" | grep "$searchstring")" >> "$tempout
Está executando a linha encontrada pelo grep no seu $ logfile (que é o que o "$" no começo do seu parêntese exterior faz) e então armazenando a saída em $ tempout. Pela sua explicação, parece que você está tentando redirecionar a linha encontrada pelo grep para $ tempout. o que seria apenas:
cat "$logfile" | grep "$searchstring" >> "$tempout"
É isso que você está tentando fazer?