Eu mesmo tive esse problema recentemente, mas no meu caso não consegui separar meu código em duas funções separadas, nem poderia prever o nome da variável global que eu definiria.
O seguinte é o que eu criei. A sintaxe de chamada é diferente, mas bastante fácil.
Pode requerer um pouco de mexer com escapes de barra invertida, no entanto.
Basicamente, funciona como read
, mas ao mesmo tempo define um global ao mesmo tempo.
#!/usr/bin/env bash
function do_your_thing() {
local name_of_capture_var="${1}"
global_var="global global global global global"
normally_sent_to_stdout="stdout stdout stdout stdout"
eval "${name_of_capture_var}=\"${normally_sent_to_stdout}\""
}
function main() {
local capture
do_your_thing capture
echo "In main():"
echo "capture: ${capture}"
echo "global_var: ${global_var}"
echo
}
main
echo "Outside of main()"
echo "capture: ${capture}"
echo "global_var: ${global_var}"