在 bash 中,有什么区别declare -r
and readonly
?
$ declare -r a="a1"
$ readonly b="b1"
我不知道该选择哪个。
tl;dr readonly
使用默认范围global甚至在函数内部。declare
使用范围local当在函数中时(除非declare -g
).
乍一看,没有什么区别。
正在检查使用声明-p http://ss64.com/bash/declare.html
$ declare -r a=a1
$ readonly b=b1
$ declare -p a b
declare -r a="a1"
declare -r b="b1"
# variable a and variable b are the same
现在回顾一下在函数中定义时的差异
# define variables inside function A
$ function A() {
declare -r x=x1
readonly y=y1
declare -p x y
}
$ A
declare -r x="x1"
declare -r y="y1"
# ***calling function A again will incur an error because variable y
# was defined using readonly so y is in the global scope***
$ A
-bash: y: readonly variable
declare -r x="x1"
declare -r y="y1"
# after call of function A, the variable y is still defined
$ declare -p x y
bash: declare: x: not found
declare -r y="y1"
为了添加更多细微差别,readonly
可用于将本地声明的变量属性更改为readonly,不影响范围。
$ function A() {
declare a="a1"
declare -p a
readonly a
declare -p a
}
$ A
declare -- a="a1"
declare -r a="a1"
$ declare -p a
-bash: declare: a: not found
注:添加-g
标志到declare
声明(例如declare -rg a="a1"
) 使变量作用域global。 (感谢@chepner)。
Note: readonly
is a "特殊内置”。如果 Bash 处于POSIX
然后模式readonly
(并不是declare
)有效果"返回错误状态不会导致 shell 退出" https://www.gnu.org/software/bash/manual/bash.html#Bash-POSIX-Mode.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)