У меня есть сценарий с некоторыми функциями, которые загружаются в начале других скриптов для выполнения общей работы. Чтобы избежать повторной обработки, я пытаюсь создать некоторый вид кеша с некоторыми переменными области видимости сценария. Так что это моя проблема:Bash: использовать переменные между вызовами функций
предположив У меня есть этот сценарий:
functions.sh
#!/bin/bash
v_cache=
set_cache()
{
v_cache=1
echo 1
}
echo_cache()
{
echo "v_cache=$v_cache"
}
test.sh
#!/bin/bash
. function.sh
var=`set_cache`
echo_cache
set_cache
echo_cache
Вот результат:
$ ./test.sh
v_cache=
1
v_cache=1
Вызов функции в атрибуции (либо с `FUNC` или $ (Func)) имеют различный контекст, чем простой вызов. Мне нужно сохранить ту же область для всех вызовов функций в одном скрипте (например, test.sh).
Для приведенного выше примера, выход я ожидал это:
$ ./test.sh
v_cache=1
1
v_cache=1
Я пытался найти какое-то объяснение, почему он работает именно так, но не может нашел ничего. Я думаю, что `` запускает новый bash исполнение, полностью независимое.
Есть способ обмена переменной через все вызовы функций? Каковы альтернативы обхода этого поведения?
Близко связано: http://stackoverflow.com/q/15541321/2088135 –