eval
deve definitivamente ser sua última opção e, particularmente, se o arquivo de entrada for uma entrada do usuário.
Para casos simples (ou seja, onde você não precisa se preocupar com caracteres de escape e citações), é possível fazer o seguinte:
IDS="1,2,3"
SOME_OTHER_IDS="4,5,6"
while read TABLE WHERECLAUSE
do
WHERECLAUSE=${WHERECLAUSE//\$IDS/$IDS}
WHERECLAUSE=${WHERECLAUSE//\$SOME_OTHER_IDS/$SOME_OTHER_IDS}
echo "$WHERECLAUSE"
mysqldump ... --where="$WHERECLAUSE"
done
Infelizmente, você precisa repetir a pesquisa e substituição para cada nome de variável possível, mas, no lado positivo, isso significa que você controla quais nomes de variáveis podem ser substituídos.