在Bash中为动态变量名赋值

11 浏览
0 Comments

在Bash中为动态变量名赋值

我如何为变量赋值,该变量在其名称中包含一个变量?\n

var1="file"
var2_$var1="folder"

\n上面的代码给我报错-bash: var2_file=folder: command not found。我很好奇如何为具有另一个变量名称的变量赋值。\nBash的版本为\"GNU bash, version 4.1.2\"。

0
0 Comments

在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"`这样的方式进行赋值。

0
0 Comments

问题的出现原因是在Bash中,不能直接将变量名赋值给另一个变量。因此,如果想要动态地给变量赋值,就需要找到解决方法。

解决方法之一是使用declare命令。可以使用以下语法将值赋给动态变量名:declare var2_$var1="123"。这将创建一个名为var2_后跟$var1的变量,并将其值设置为123

另一个解决方法是使用export命令。然而,export命令不能直接将变量名赋值给另一个变量。它用于将变量导出为环境变量,以便在子进程中使用。

set命令也不能直接将变量名赋值给另一个变量。它用于设置shell选项和位置参数。

然而,以上这些解决方法都没有提供直接获取动态变量值的方法。在示例中,作者尝试使用echo $var2_$var1来获取动态变量var2_$var1的值,但是并没有成功。

解决这个问题的更好的方法是使用关联数组(assoc array)。关联数组允许使用字符串作为索引来访问值。这样,就可以动态地创建和访问变量。

总结起来,想要在Bash中动态地给变量赋值,可以使用declare命令或关联数组。这样可以避免直接将变量名赋值给另一个变量的问题,并能够方便地获取动态变量的值。

0