在BASH中更改引用的变量

时间:2013-11-13 21:37:13

标签: bash function pointers reference global-variables

我打算在BASH中的函数内部更改一个全局变量,但是我不知道如何做到这一点。这是我的代码:

CANDIDATES[5]="1 2 3 4 5 6"
random_mutate()
{
a=$1 #assign name of input variable to "a"
insides=${!a} #See input variable value
RNDM_PARAM=`echo $[ 1 + $[ RANDOM % 5 ]]` #change random position in input variable
NEW_PAR=99 #value to substitute
ARR=($insides) #Convert string to array
ARR[$RNDM_PARAM]=$NEW_PAR #Change the random position
NEW_GUY=$( IFS=$' '; echo "${ARR[*]}" ) #Convert array once more to string 
echo "$NEW_GUY" 
### NOW, How to assign NEW_GUY TO CANDIDATES[5]?
}

random_mutate CANDIDATES[5]

我希望能够将NEW_GUY分配给$ 1引用的变量,或分配给$ 2指向的另一个变量(代码中不包含)。我不想在代码中进行直接赋值,因为我打算将函数用于多个可能的输入(事实上,在我的原始代码中,赋值NEW_PAR = 99非常复杂,因为它意味着选择一个数字取决于使用R函数在一系列随机值中的位置,但为了简单起见,我以这种方式包含它。)

希望这很清楚。如果您需要更多信息,请与我们联系。

谢谢,

利伯塔德

1 个答案:

答案 0 :(得分:1)

您可以使用eval

eval "$a=\$NEW_GUY"

小心并且仅在$a的值安全时使用它(想象如果$a设置为rm -rf / ; a会发生什么情况。)