В файле у вас не разные аргументы, а просто строка.
Вы ее и передаете как строку, и ожидаете, что команда read ее распарсит на отдельные аргументы.
Но read так не делает.
Правильный способ - пользоваться CSV файлами, в которых будет лежать:
str1,var1 vvv
str2,var2 www
И тогда можете парсить по запятым (или взять в качестве разделителя любой друой символ, который не встречается в ваших данных)
while read; do
echo ${REPLY} | cut -d "," --output-delimiter ":" -f 1,2
done <<<'str1,var1 vvv
str2,var2 www'
Если хотите чтобы файл парсился по кавычкам, пишите парсер на прочитанный line, или уже внутри вашей функции парсер (можно даже тот же cut натравить на кавычки, и пропускать промежуточные столбцы):
while read; do
echo "${REPLY}" | cut -d "\"" --output-delimiter ":" -f 2,4
done <<<'"str1" "var1 vvv"
"str2" "var2 www"'
Но это уже велосипед.