在 Bash 中,在子 shell 中声明的变量与在父 shell 中声明的同名变量不同,除非后者被显式export
ed:
a=12
(a=13; echo $a)
echo $a
# Output:
# 13
# 12 Outer variable wasn't changed
但是,如果外部变量被声明为readonly
,则子 shell 无法重新定义它,从而防止重复使用相同的名称,即使它不会造成任何伤害:
readonly a=12
(a=13; echo $a)
echo $a
# Output:
# test.sh: line 2: a: readonly variable
# 12 Only the outer echo is executed
如果我将子 shell 中的变量也声明为 readonly
,我仍然会得到同样的错误,但是这次执行了子 shell 中的 echo
还有:
readonly a=12
(readonly a=13; echo $a)
echo $a
# Output:
# test.sh: line 2: a: readonly variable
# 12 global value is used in sub-shell
# 12
现在,就我的目标而言,即避免子函数(由其他函数调用的函数)中定义的变量与父函数中定义的同名变量发生冲突,我可以满足于使用非 readonly
父 shell 中的变量。但是,如果不打算更改变量,则将变量声明为 readonly
非常有用,因为它有助于防止多种错误,所以我想避免放弃它们。
那么,您知道是否有一种方法可以从子 shell 中重用在父 shell 中声明为 readonly
的变量名?
最佳答案
从这篇文章中,Use of read-only variables in shell scripts ,看起来只读状态不会被子进程继承。
所以你可以启动一个子进程,而不是像这样的子shell:
readonly a=12
bash -c 'a=13; echo $a'
echo $a
输出:
13
12
关于bash - 是否可以在 bash 子 shell 中重用只读变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081799/