gpt4 book ai didi

bash - 为什么我不能在函数内部使用 `declare -r` 来标记变量只读,而 `set -u` 正在使用中?

转载 作者:行者123 更新时间:2023-11-29 09:27:56 24 4
gpt4 key购买 nike

使用 GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)

#! /bin/bash
set -u

exec {FD1}>tmp1.txt
declare -r FD1
echo "fd1: $FD1" # why does this work,

function f1() {
exec {FD2}>tmp2.txt
readonly FD2
echo "fd2: $FD2" # this work,
}

f1

function f2() {
exec {FD3}>tmp3.txt
echo "fd3: $FD3" # and even this work,
declare -r FD3
echo "fd3: $FD3" # when this complains: "FD3: unbound variable"?
}

f2

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

最佳答案

我不认为这是一个错误。 exec 语句在 global 范围内为参数 FD3 赋值,而 declare 语句创建一个 < em>local 遮蔽全局的参数:

When used in a function, `declare' makes NAMEs local, as with the `local' command. The `-g' option suppresses this behavior.

是未定义的局部参数。您可以通过一个略有不同的示例来了解这一点:

$ 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

关于bash - 为什么我不能在函数内部使用 `declare -r` 来标记变量只读,而 `set -u` 正在使用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com