无法拥有与全局只读变量同名的局部变量

Man*_*era 6 bash shell-script

#!/bin/bash

readonly x=2

function test {
 local x=1
 echo ${x}
}

test
echo $x
Run Code Online (Sandbox Code Playgroud)

结果是,

readonly-local-test.sh: line 6: local: x: readonly variable
2
2
Run Code Online (Sandbox Code Playgroud)

当变量是只读时,就会发生这种情况。但是,如果我删除只读限制,如下所示,

#!/bin/bash

x=2
function test {
 local x=1
 echo ${x}
}

test
echo $x
Run Code Online (Sandbox Code Playgroud)

结果是,

1
2
Run Code Online (Sandbox Code Playgroud)

为什么只读全局变量不能被隐藏?

Rom*_*nov 0

据我所知,这种行为可以命名为“工作作为设计”。您有只读变量,并且您无法更改该变量的值。在 bash 中,您无法选择定义覆盖此类全局变量集的变量。

  • 我确实意识到只读变量不应该被允许改变。我的问题是,普通的全局变量可以被局部变量隐藏,而只读全局变量不能被隐藏。 (3认同)