我在脚本中使用readonly local如下变量定义函数:
test.sh
function test_function() {
readonly local foo="bar"
}
Run Code Online (Sandbox Code Playgroud)
在采购之前,foo当然是未定义的
$> echo $foo
$>
Run Code Online (Sandbox Code Playgroud)
但是当我获取并运行该函数时
$> source test.sh
$> test_function
$> echo $foo
bar
$>
Run Code Online (Sandbox Code Playgroud)
突然间,变量泄漏超出了其范围。删除readonly即可解决问题。我对 a 的使用有什么误解,readonly并且local两者都可以使用而不会出现此问题吗?
用例是,test_function多次调用时我收到错误/警告,因为该变量应该是只读的,但已经定义了。
代替:
readonly local foo="bar"
Run Code Online (Sandbox Code Playgroud)
和:
local -r foo="bar"
Run Code Online (Sandbox Code Playgroud)
问题是readonly local foo="bar"定义了两个只读变量:一个名为named local,一个名为named foo。它不会创建任何局部变量。
相比之下,local -r foo="bar"创建一个名为的变量foo,该变量既是本地的又是只读的。
正如David C Rankin指出的那样,一旦创建了全局只读变量,就无法取消设置它。您需要关闭现有的 shell 并启动一个新的 shell。
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |