我正在使用readonly local
这样的变量在脚本中定义函数:
test.sh
function test_function() {
readonly local foo="bar"
}
在采购之前,foo
当然是未定义的
$> echo $foo
$>
但是当我找到并运行函数时
$> source test.sh
$> test_function
$> echo $foo
bar
$>
突然,该变量泄漏到其范围之外。删除readonly
可解决此问题。我对于使用readonly
和local
有什么误解,并且可以同时使用而不会出现此问题?
用例是多次调用test_function
时会收到错误/警告,因为该变量应该是只读的,但是已经定义了。
答案 0 :(得分:3)
替换:
readonly local foo="bar"
具有:
local -r foo="bar"
问题是readonly local foo="bar"
定义了两个只读变量:一个名为local
,一个名为foo
。它不会创建任何 local 变量。
相比之下,local -r foo="bar"
创建一个名为foo
的变量,它既是 本地又是只读。
正如David C Rankin所指出的那样,一旦创建了全局只读变量,就不能取消设置它。您需要关闭现有的外壳并开始一个新的外壳。