在Bash中为动态变量名赋值
在Bash中,有时候我们希望将一个动态的变量名赋值给另一个变量,并在设置后使用该变量来获取值。比如上面的例子中,我们希望将变量var1的值拼接到var2_前面,然后再将123赋值给这个新的变量名,并打印出其值。
为了实现这个目的,可以使用一个新的变量来保存动态的变量名,并在设置后使用这个新变量来获取值。具体实现如下:
new_var=var2_$var1 declare var2_$var1="123" echo "${!new_var}" # => 123
这样就能够实现将动态变量名赋值给另一个变量,并通过这个新变量来获取值的需求。
然而,不幸的是,Bash不允许使用`declare $new_var="123"`这种方式来进行赋值,这也就导致了上面的解决方案不够优雅。
总结起来,为了在Bash中将动态变量名赋值给另一个变量并获取值,可以通过拼接变量名的方式来实现,并使用`${!new_var}`来获取这个动态变量的值。但是需要注意的是,Bash不支持直接使用`declare $new_var="123"`这样的方式进行赋值。
问题的出现原因是在Bash中,不能直接将变量名赋值给另一个变量。因此,如果想要动态地给变量赋值,就需要找到解决方法。
解决方法之一是使用declare
命令。可以使用以下语法将值赋给动态变量名:declare var2_$var1="123"
。这将创建一个名为var2_
后跟$var1
的变量,并将其值设置为123
。
另一个解决方法是使用export
命令。然而,export
命令不能直接将变量名赋值给另一个变量。它用于将变量导出为环境变量,以便在子进程中使用。
set
命令也不能直接将变量名赋值给另一个变量。它用于设置shell选项和位置参数。
然而,以上这些解决方法都没有提供直接获取动态变量值的方法。在示例中,作者尝试使用echo $var2_$var1
来获取动态变量var2_$var1
的值,但是并没有成功。
解决这个问题的更好的方法是使用关联数组(assoc array)。关联数组允许使用字符串作为索引来访问值。这样,就可以动态地创建和访问变量。
总结起来,想要在Bash中动态地给变量赋值,可以使用declare
命令或关联数组。这样可以避免直接将变量名赋值给另一个变量的问题,并能够方便地获取动态变量的值。