0

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関数を使用してランダム値の範囲内の位置を取得しますが、簡単にするためにこのように含めました)。

うまくいけば、これは十分に明確です。さらに情報が必要な場合はお知らせください。

ありがとうございました、

リベルタード

4

1 に答える 1

1

使用できますeval

eval "$a=\$NEW_GUY"

注意して、 の値が安全な場合にのみ使用してください(が に設定されている場合に$a何が起こるか想像してください)。$arm -rf / ; a

于 2013-11-13T23:19:41.880 に答える