首页 > 解决方案 > bash 函数作用域和变量作用域

问题描述

这是一组简化的 bash 命令,可重现我在脚本中遇到的问题:

X=9
true && f() { (( x++ )) ; echo hello } ; f

哪个返回

hello

然后

echo $X

返回

X=9

我期望得到 X=10 的地方

你能解释一下为什么在函数中没有修改全局变量吗?

我知道全局变量在 subshel​​l 中没有被修改,但在这个例子中不是这样。观察到的行为(变量范围)似乎与函数在“条件语句”中声明的事实有关:在 && 之后。

标签: bash

解决方案


大写的全局 X 和函数调用小写的 x。这是两个不同的变量。


推荐阅读