如何处理下面的变量赋值?我正在分配var1=1
下一个分配值var2=$var1
,但是每次我更改值时var1
,echo $var2
总是显示旧值,即
# var1=1
# var2=$var1
# echo $var2
1
# var1=2
# echo $var2
1
答案1
这是关于如何许多/最多编程语言可以工作。
在命令式语言 ( bash
// C
/ ....) 中,运算符执行以下操作Java
:python
=
不是与数学中的工作方式相同。
a=1
意味着将 1 放入a
(覆盖那里的内容)。
IE
var1=1 # var1 ← 1 #overwrite var1 with 1
var2=$var1 # var2 ← $var1 #overwrite var2 with evaluation of $var1 (i.e 1)
var1=2 # var1 ← 2 #overwrite var1 with 2
stdout ←← $var2 #append $var2 to stdout
所以
# var1 var2
var1=1 # 1 n/a
var2=$var1 # 1 1
var1=2 # 2 1
答案2
如果您将 的值分配var1
给var2
您,您将拥有两个自变量var1
,并且var2
它们恰好具有相同的值。
var2
您可以使用通过属性声明的变量nameref
来引用var1
.
$ var1=1
$ declare -n var2=var1
$ echo "$var2"
1
$ var1=2
$ echo "$var2"
2
$ var2=3
$ echo "$var2 $var1"
3 3