Если вы в порядке с минимальным дисковым вводом / выводом, вы можете открыть дескриптор файла для записи в файл, а затем проанализировать его после завершения функции.
В этом примере fd 3
будет служить нашей цели
doThing() {
echo "stuff"
echo "things"
exec 3<> /tmp/foo
echo "usefulstring" >&3
exec 3>&-
}
и теперь анализирует этот файл, используя read
для одной переменной или mapfile
, если вы передаете несколько словв массив.Таким образом, переменная содержит строковые значения, даже если они содержат пробелы между.
doThing
read -r str < /tmp/foo
Результат будет доступен в str
, который вы можете заключить в кавычки в условных выражениях.Если ваша файловая система сохраняет занятость /tmp
или /var
, вы можете использовать mktemp
, чтобы создать файл в локальном каталоге для использования для fd.
Это также удовлетворяет вашему последнему требованию - я хотел бы видеть эхо регистрации в stdout, но не возвращаемое значение.