Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 更新嵌套变量中的值_Bash_Variables - Fatal编程技术网

Bash 更新嵌套变量中的值

Bash 更新嵌套变量中的值,bash,variables,Bash,Variables,我想通过连接多个变量的值,从多个变量中创建一个变量。之后,我想更新这些嵌套子变量中的值,并查看父变量中的更改。大概是这样的: #!/bin/bash a=123 b=abc c=$a$b echo $c # outputs 123abc a=456 echo $c # outputs 123abc although I want 456abc 我想将其输出为123abc和456abc,但我得到的是123abc和123abc。有可能在bash中实现我想要的行为吗?我想这就是您想要的。但是要

我想通过连接多个变量的值,从多个变量中创建一个变量。之后,我想更新这些嵌套子变量中的值,并查看父变量中的更改。大概是这样的:

#!/bin/bash

a=123
b=abc

c=$a$b
echo $c # outputs 123abc

a=456
echo $c # outputs 123abc although I want 456abc

我想将其输出为
123abc
456abc
,但我得到的是
123abc
123abc
。有可能在bash中实现我想要的行为吗?

我想这就是您想要的。但是要小心,因为如果您不信任输入,使用eval可能会很危险

#!/bin/bash

a=123
b=abc

c="\${a}\${b}"
eval "echo $c"

a=456
eval "echo $c" 

希望有帮助

我想这就是你要找的。但是要小心,因为如果您不信任输入,使用eval可能会很危险

#!/bin/bash

a=123
b=abc

c="\${a}\${b}"
eval "echo $c"

a=456
eval "echo $c" 
希望有帮助

在BASH(4+)中,您可以使用
declare-n
创建变量引用,因此如果您有:

a=123
并创建变量引用,如下所示:

declare -n c=a
然后,
echo$c
将打印
123

如果现在更改为
a=789
,那么如果再次执行
echo$c
,您将获得
789
的更新值

但是,此
参考
只能为单个变量(或数组)创建,也不能为多个变量的组合创建

作为一个简单的工作,考虑使用shell函数作为您的用例:

c() { echo "$a$b"; }
然后,
$(c)
将始终是动态的,并且总是通过在BASH(4+)中连接值
a
b
来获取更新值,您可以使用
声明-n
创建变量引用,因此如果您有:

a=123
并创建变量引用,如下所示:

declare -n c=a
然后,
echo$c
将打印
123

如果现在更改为
a=789
,那么如果再次执行
echo$c
,您将获得
789
的更新值

但是,此
参考
只能为单个变量(或数组)创建,也不能为多个变量的组合创建

作为一个简单的工作,考虑使用shell函数作为您的用例:

c() { echo "$a$b"; }

然后,
$(c)
将始终是动态的,并且总是通过将值
a
b
连接起来来获得更新值。通过执行
c=$a$b
,您不会将
a
b
的引用分配给
c
,但是您正在分配它们的值。我建议对嵌套变量(如
c(){echo“$a$b”;}
)使用函数而不是变量,并将其用作脚本中的
$(c)
,您将一直获得更新的值。通过执行
c=$a$b
,您没有将
a
b
的引用分配给
c
,而是分配它们的值。我建议对嵌套变量(如
c(){echo“$a$b”;}
使用函数而不是变量,并将其用作
$(c)
在您的脚本中,您将一直获得更新的值。不建议
eval
吗?是的。它是。正如我指出的那样。但这是实现OP所希望的最好的方法在XY问题上,解决Y的最好方法不一定是解决X的好方法。不是被劝阻了吗?是的。它是。正如我指出的那样。但这是实现OP所想的最好方法在XY问题中,解Y的最好方法不一定就是解X的好方法。