У меня есть вопрос о функции в качестве параметра bash.
Если выполняется следующая логика:
Var=5
Step=2
funct() {
echo "[Line = $LINENO] $Var"
Var=$(($Var+$Step))
echo "[Line = $LINENO] $Var"
}
main()
{
echo "[Line = $LINENO] $Var"
funct
echo "[Line = $LINENO] $Var"
}
main
вывод равен
[Line = 13] 5
[Line = 6] 5
[Line = 8] 7
[Line = 15] 7
, как вы видите, Var изменяется, как и ожидалось.
Однако, пожалуйста, проверьте следующий пример, где функция передается в качестве параметра для оболочки.
Var=5
Step=2
funct() {
echo "[Line = $LINENO] $Var"
Var=$(($Var+$Step))
echo "[Line = $LINENO] $Var"
}
main()
{
echo "[Line = $LINENO] $Var"
funct
echo "[Line = $LINENO] $Var"
}
main2()
{
echo "[Line = $LINENO] $Var"
($1)
echo "[Line = $LINENO] $Var"
}
main
main2 funct
результат равен
[Line = 12] 5
[Line = 5] 5
[Line = 7] 7
[Line = 14] 7
[Line = 21] 7
[Line = 5] 7
[Line = 7] 9
[Line = 23] 7
Пожалуйста, обратите внимание, что оболочка обратного вызова НЕ МОЖЕТ фактически изменить Var.
Поскольку я сейчас занимаюсь каркасом, поэтому может пожелать, чтобы некоторые общие действия были функциями в качестве параметров общего потока управления.
Как мне сделать обертку, которая принимает функцию в качестве параметра для реального изменения глобальной переменной?
Спасибо ~