Bash 为什么可以';在使用'set-u'时,我是否在函数中使用'declare-r'将变量标记为只读?
使用GNUBash,版本4.3.11(1)-发行版(x86_64-pc-linux-GNU)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
目标是使我的文件描述符只读我不认为这是一个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