Я не уверен, что строки, разделенные новой строкой, являются хорошим способом обработки последовательностей имен файлов (вместо этого вы можете использовать массивы).
Однако, учитывая то, что у вас есть, комбинация здесь строк со встроенной способностью read
читать из пронумерованных файловых дескрипторов может работать:
while IFS= read -r -u3 x; IFS= read -r -u4 y; do
echo ln -s "$x" "$y"
done 3<<<"$oldfilenames" 4<<<"$newfilenames"
[ эхо
включено в целях тестирования].