Você pode usar uma função recursiva que chama a si mesma enquanto houver arquivos para processar:
#!/bin/bash
process () {
local prefix=$1
local file=$2
shift 2
while read line ; do
if (($#)) ; then # There are still unprocessed files.
process "$prefix $line" "$@"
else # Reading the last file.
printf '%s\n' "$prefix $line"
fi
done < "$file"
}
process '' "$@"