Não tenho certeza se as strings delimitadas por nova linha são uma boa maneira de lidar com sequências de nomes de arquivos (você pode querer usar matrizes em vez disso).
No entanto, dado que é isso que você tem, uma combinação de aqui strings com a capacidade integrada do read
de ler a partir de descritores de arquivos numerados pode funcionar:
while IFS= read -r -u3 x; IFS= read -r -u4 y; do
echo ln -s "$x" "$y"
done 3<<<"$oldfilenames" 4<<<"$newfilenames"
[o echo
está incluído para fins de teste].