首页 > 解决方案 > 如何将只读变量范围限制为函数?

问题描述

我正在使用readonly local如下变量在脚本中定义函数:

test.sh

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

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

$> echo $foo

$>

但是当我获取并运行该功能时

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

突然变量已经超出了它的范围。删除readonly可以解决问题。我对使用readonlyand有什么误解,local并且两者都可以在没有这个问题的情况下使用?

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

标签: bash

解决方案


代替:

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。


推荐阅读