Bash 为什么可以';在使用'set-u'时,我是否在函数中使用'declare-r'将变量标记为只读?

Bash 为什么可以';在使用'set-u'时,我是否在函数中使用'declare-r'将变量标记为只读?,bash,Bash,使用GNUBash,版本4.3.11(1)-发行版(x86_64-pc-linux-GNU) 目标是使我的文件描述符只读我不认为这是一个bug。exec语句为全局作用域中的参数FD3指定一个值,而declare语句创建一个覆盖全局作用域的局部参数: 在函数中使用时,“declare”使名称成为本地名称,就像“local”一样 指挥部。“-g”选项禁止此行为 这是未定义的局部参数。您可以通过稍微不同的示例看到这一点: $ FD3=foo $ f () { FD3=bar; declare -r F

使用GNUBash,版本4.3.11(1)-发行版(x86_64-pc-linux-GNU)


目标是使我的文件描述符只读

我不认为这是一个bug。
exec
语句为全局作用域中的参数
FD3
指定一个值,而
declare
语句创建一个覆盖全局作用域的局部参数:

在函数中使用时,“declare”使名称成为本地名称,就像“local”一样 指挥部。“-g”选项禁止此行为

这是未定义的局部参数。您可以通过稍微不同的示例看到这一点:

$ FD3=foo
$ f () { FD3=bar; declare -r FD3=baz; echo $FD3; }
$ f
baz   # The value of the function-local parameter
$ echo $FD3
bar   # The value of the global parameter set in f

这显然是一个bug。我试着向狂欢会报告-bugs@gnu.org列表?
exec{FD1}>tmp1.txt
对我来说是新的,这意味着什么?我在关于重定向的手册部分找不到这种语法。从,第2段:每个可能前面有文件描述符编号的重定向可能前面有一个{varname}形式的单词。在这种情况下。。。shell将分配一个大于10的文件描述符,并将其分配给{varname}@CharlesDuffy。我通常认为这是我不理解的,尤其是对于bash。如果我不能在这里解决它,我肯定会尝试bash bug emailNo,它不是bug,
declare
在函数中使用表示本地范围
$ FD3=foo
$ f () { FD3=bar; declare -r FD3=baz; echo $FD3; }
$ f
baz   # The value of the function-local parameter
$ echo $FD3
bar   # The value of the global parameter set in f