Изменение значения переменной в массиве с помощью bash

#arrays #bash #variables

#массивы #bash #переменные

Вопрос:

Я пытаюсь создать простой способ инициализации группы переменных.

Идея заключалась в том, чтобы создать массив и добавить переменные в массив, затем перебрать их и инициализировать.

Проблема в том, что я не могу понять, как изменить значение переменной в массиве. Я знаю, как изменить FruitsArray[3] значение на равное чему-то другому, но если переменная $Apple находится в массиве, и я хочу изменить ее с «безопасной» на «отравленную», я, похоже, не могу понять это.

Конечно, может быть более простой способ инициализации группы переменных, но, похоже, я должен знать, как это сделать, и я упускаю что-то очевидное.

Комментарии:

1. FruitsArray[$Apple]=poisoned

2. Что вы подразумеваете под «переменной $Apple в массиве». Массив не содержит других переменных.

3. $Apple будет значением переменной Apple , которая находится в массиве. Вам просто нужно изменить значение в соответствующем индексе.

Ответ №1:

Если я вас правильно понял, у вас есть это:

 FruitsArray[0]="Apricot"
FruitsArray[1]="Avocado"
FruitsArray[2]="Banana"
FruitsArray[3]="Apple"
  

И, кроме того:

 Apple="safe"
  

И вы хотите изменить значение Apple, на которое указывает FruitsArray[3] .

Обращение к такому значению называется косвенным:

 index="${FruitsArray[3]}"
echo "variable and value ${FruitsArray[3]}=${!index}"
  

И изменяется с помощью:

 declare ${FruitsArray[3]}="poisoned"
  

Весь скрипт:

 #!/bin/bash

FruitsArray[0]="Apricot"
FruitsArray[1]="Avocado"
FruitsArray[2]="Banana"
FruitsArray[3]="Apple"

Apple="safe"

index="${FruitsArray[3]}"
echo "from ${FruitsArray[3]}=${!index}"
declare ${FruitsArray[3]}="poisoned"
echo "to ${FruitsArray[3]}=${!index}"
  

При исполнении:

 from Apple=safe
to Apple=poisoned