我打算在 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 函数根据随机值范围内的位置选择一个数字, 但为了简单起见,我以这种方式包含它)。
希望这已经足够清楚了。如果您需要更多信息,请告诉我。
谢谢
利伯塔德
您可以使用
eval
:
eval "$a=$NEW_GUY"
要小心,只有在$a
的值是安全的时才使用它(想象一下如果$a
设置为 rm -rf / ; a
会发生什么)。