Вот код:
#! /bin/bash
function foo() {
G1=123
echo "ReturnVal"
}
RV="$(foo)"
echo "RV=$RV, G1=$G1" # RV=ReturnVal, G1=
foo >/dev/null
echo "G1=$G1" # G1=123
Я хочу выполнить функцию, установить глобальную переменную G1 и записать стандартный вывод функции в переменную.
Первый вызов не может установить глобальную переменную, потому что функция выполняется в подоболочке. Но это канонический способ получить стандартный вывод в переменную.
Я понимаю, что второй вызов функции foo() выбрасывает стандартный вывод. Запись этого на консоль одинаково бессмысленна для моей цели. Но это показывает, что функция способна устанавливать глобальную переменную.
Обратите внимание, что ни одно решение не может использовать временный файл в файловой системе. Функция, которую я на самом деле пытаюсь написать, уже имеет дело с временными файлами и их автоматической очисткой; введение другого временного файла не вариант.
Есть ли способ?