Eu acho que você não pode sair sem usar um arquivo temporário. zsh
tem suporte embutido para isso com sua forma =(...)
de substituição de comando.
Aqui, para verificar a ortografia do conteúdo de uma variável (da saída de printf %s $string
):
{
(){
aspell check -x $1 >&3 3>&-
cat $1
} =(printf %s $string) | IFS= read -rd '' corrected_string
} 3>&1