No entiendo lo que propones e-Minguez.
En cuanto al separador, podría cambiarse por / y ya no habría problema, porque los archivos no pueden contener / en el nombre. El caso es que donde lo usaré como mucho habrá espacios en los nombres, por eso no le he dado muchas vueltas a ese asunto.
Si no uso "echo a | grep blah", ¿cómo compruebo si una cadena está contenida en otra? Bueno ya buscaré esto, supongo que habrá cien formas.
Respecto al punto 3 de Ferdy, los archivos "a" y "c" los detectaría, el "a b" no y lo borraría. Eso ya lo había pensado, si un archivo a borrar tenía el nombre contenido en el de un archivo de la lista, por eso hago grep "|$i|" y la lista empieza y termina con los separadores. No sé si intentas que vea otra cosa que no veo.
Gracias por los comentarios