【发布时间】:2021-03-08 13:29:53
【问题描述】:
我会尽力解释:
我正在编写一个 bash 脚本并且我在一个 for 循环中。对于all 循环,我得到了一个变量VAR_ID,它用于存储另一个变量的标识符,当所有工作完成时,该变量将被导出。对于每一个循环,我得到了一个变量VAL。 VAL 的值应分配给 VAR_ID 的值。最后,VAR_ID 的值必须是一个数组才能存储所有值。
呼……嗯,这对我来说有点难以解释,但我认为这个简单的脚本应该能阐明我想要做什么(当然,它的实际目的已经缩小了):
#!/bin/bash
COUNT=0
VAR_ID="my_array"
declare -a "$VAR_ID"
while (( $COUNT <= 2 ))
do
VAL=$RANDOM
$VAR_ID+=( "$VAL" ) # this doesn't work
(( COUNT++ ))
done
export $VAR_ID
这应该会产生一个变量my_array 和其中的三个随机值。我尝试像在declare $VAR_ID=$VAL 中一样使用declare,但是如果我使用+= 而不是=,这将不再有效。
COUNT 可以在可能的解决方案中用作位置编号,或者如果它有帮助,因为我在我的原始脚本中也有它。
提前感谢您的帮助
编辑:我知道eval 有可能,但我尽量避免使用它,直到没有其他方法。
【问题讨论】:
-
参见this answer,tl;dr:将 VAR_ID 设为 nameref。
-
也许我不明白你的意思。但是 nameref 并没有真正的帮助,因为我已经能够处理正确的值。它在我尝试使用
+=和declare构建名为$VAR_ID的数组的部分失败。所以我自己的解决方案,或者我应该称之为解决方法,就是使用+=或declare,但不能同时使用两者,因为那样会失败。 -
这正是 nameref 应该提供帮助的地方。如果你在开头使用
declare -n VAR_ID=my_array,VAR_ID+=(whatever)会将whatever添加到名为my_array的数组中,如果 bash 可以导出数组,export "${!VAR_ID}”将导出my_array,但它不能。
标签: arrays bash variables export declare