Bash: Как изменить значение в массиве, который содержит переменную, без изменения переменной - PullRequest
0 голосов
/ 21 октября 2018
#!/bin/bash
c21=Apples
c31=Oranges
c41=Pears
movelist=(c21 c31 c41)
for movecheck in ${!movelist[@]} ; do
  eval "declare movecontents=$"${movelist[$movecheck]}""
  if [ "$movecontents" != "Oranges" ] ; then
  "${movelist[$movecheck]}"="" 
  fi
done
echo ${movelist[@]}

Моя цель состоит в том, чтобы строка 9 установила значение / в массиве, чтобы обнулить / удалить его из массива, следовательно, ="".Однако с таким кодом, как он есть, потому что ${movelist[$movecheck]} приводит к переменной, c*1, при объявлении его как нулевого, он выплевывает c41= command not found.Я попытался использовать eval & Declare: eval "declare "${movelist[$movecheck]}"=''", но при этом вместо удаления значения из массива он изменяет фактическую переменную.Таким образом, результат для приведенного выше примера кода должен иметь массив movelist, содержащий (c21 c41) в конце.Приветствия.

1 Ответ

0 голосов
/ 21 октября 2018

Используйте unset для удаления элемента массива:

$ a=(a b c d)
$ declare -p a
declare -a a=([0]="a" [1]="b" [2]="c" [3]="d")
$ unset a[2]
$ declare -p a
declare -a a=([0]="a" [1]="b" [3]="d")

Итак: unset movelist[$movecheck] - это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...