bash - bash 函数作用域和变量作用域
问题描述
这是一组简化的 bash 命令,可重现我在脚本中遇到的问题:
X=9
true && f() { (( x++ )) ; echo hello } ; f
哪个返回
hello
然后
echo $X
返回
X=9
我期望得到 X=10 的地方
你能解释一下为什么在函数中没有修改全局变量吗?
我知道全局变量在 subshell 中没有被修改,但在这个例子中不是这样。观察到的行为(变量范围)似乎与函数在“条件语句”中声明的事实有关:在 && 之后。
解决方案
大写的全局 X 和函数调用小写的 x。这是两个不同的变量。
推荐阅读
- laravel - 是否有 Laravel 8 中使用的 Jetstream 组件的文档?
- java - 在 for 循环中预期的 Java 变量
- r - 如何用 R 官员包裁剪地块?
- security - 雪花服务帐户的密钥对或 Oauth 配置
- python - 如何在 selenium Python 中单击基于移动网站的菜单项?
- python - 转换为 exe 时 Python pyinstaller 错误
- python - 如何在使用 id 作为参数的反向时解决 django 中的 NoReverseMatch?
- flutter - 输入'未来
' 不是颤振 Firestore 中类型 '() => void' 的子类型 - assembly - Qtspim:生成数组并更改值,语法错误
- data-analysis - 如果年龄变量的数据类型是对象,我想将其转换为数值。但我的模型中出现这样的错误