如何将只读变量范围限制为函数?

时间:2019-05-22 06:41:33

标签: bash

我正在使用readonly local这样的变量在脚本中定义函数:

test.sh

function test_function() {
    readonly local foo="bar"
}

在采购之前,foo当然是未定义的

$> echo $foo

$>

但是当我找到并运行函数时

$> source test.sh
$> test_function
$> echo $foo
bar
$>

突然,该变量泄漏到其范围之外。删除readonly可解决此问题。我对于使用readonlylocal有什么误解,并且可以同时使用而不会出现此问题?

用例是多次调用test_function时会收到错误/警告,因为该变量应该是只读的,但是已经定义了。

1 个答案:

答案 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所指出的那样,一旦创建了全局只读变量,就不能取消设置它。您需要关闭现有的外壳并开始一个新的外壳。