在bash,就是在差异declare -r和readonly?
$ declare -r a="a1"
$ readonly b="b1"
Run Code Online (Sandbox Code Playgroud)
我不知道该选哪个.
Jam*_*979 30
答:范围
乍一看,没有区别.
使用declare -p检查
$ 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
Run Code Online (Sandbox Code Playgroud)
但是,范围是不同的
# 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"
Run Code Online (Sandbox Code Playgroud)
因此,一个区别是readonly将变量范围设为全局. declare使变量范围成为本地(这是预期的).
注意:declare -g在readonly语句中添加标志(例如-g)会使变量范围成为全局变量.(谢谢@chepner).
注意:declare是" 特殊建筑 ".如果Bash处于declare -rg a="a1"模式,那么readonly(而不是POSIX)具有" 返回错误状态将不会导致shell退出 "的效果.
| 归档时间: |
|
| 查看次数: |
5305 次 |
| 最近记录: |