2013-11-13 3 views
0

Я намерен изменить глобальную переменную внутри функции в BASH, однако я не понимаю, как это сделать. Это мой код:Измените ссылочную переменную в 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 (не incuded в коде). Я не хочу делать прямое назначение в коде, поскольку я намерен использовать эту функцию для нескольких возможных входов (на самом деле назначение NEW_PAR = 99 в моем исходном коде сложнее, поскольку подразумевает выбор числа в зависимости от положение в диапазоне случайных значений с использованием функции R, но для простоты я включил его таким образом).

Надеюсь, это достаточно ясно. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо,

Libertad

ответ

1

Вы можете использовать eval:

eval "$a=\$NEW_GUY" 

Будьте осторожны и использовать его только если значение $a безопасно (представьте, что произойдет, если $a установлен в rm -rf/; a).

Смежные вопросы