bash - 如何将只读变量范围限制为函数?
问题描述
我正在使用readonly local
如下变量在脚本中定义函数:
test.sh
function test_function() {
readonly local foo="bar"
}
在采购之前,foo
当然是未定义的
$> echo $foo
$>
但是当我获取并运行该功能时
$> source test.sh
$> test_function
$> echo $foo
bar
$>
突然变量已经超出了它的范围。删除readonly
可以解决问题。我对使用readonly
and有什么误解,local
并且两者都可以在没有这个问题的情况下使用?
用例是我在test_function
多次调用时收到错误/警告,因为该变量应该是只读的,但已经定义了。
解决方案
代替:
readonly local foo="bar"
和:
local -r foo="bar"
问题在于它readonly local foo="bar"
定义了两个只读变量:一个 namedlocal
和一个 named foo
。它不创建任何局部变量。
相比之下,local -r foo="bar"
创建一个名为的变量,它既foo
是本地的又是只读的。
正如David C Rankin指出的那样,一旦您创建了一个全局只读变量,就无法取消设置它。您需要关闭现有的 shell 并启动一个新的 shell。
推荐阅读
- android-studio - 如何解决我在 Eclipse IDE 中安装的 Android 的问题?
- ios - Target 覆盖 Xcode 12.5 和 Swift 5 中的“ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES”构建设置警告
- php - 资源所有者或授权服务器拒绝了该请求。laravel 护照
- shell - 如何将多个文件作为参数传递给shell脚本中的函数
- flutter - Flutter:如何从 api 获取数据并绑定到 PaginatedDataTable
- wordpress - WordPress WooCommerce 中的帐户验证电子邮件
- riscv - 为什么不受约束的 LR/SC 序列在某些 RISCV 实现上永远不会成功?
- r - 如何从一个列表中获取另一个
- github - 拒绝允许个人访问令牌创建或更新工作流
- ios - Swift 5 远程图像在 UITableViewCell 中单击而不是加载