Используйте переменную в качестве части названия имени массива?

Изменение хорошего уровня процесса вряд ли будет влиять на значение системной нагрузки. Значение системной нагрузки является средней длиной очереди выполнения, которая является в основном количеством процессов, желающих использовать ЦП.

Если Вы работаете, зависящий от ЦП процесс (rsync не, но просто например), то он будет всегда хотеть использовать процессорное время каждый раз, когда существуют некоторые доступные. Так как это всегда хочет работать, это внесет значение загрузки 1,0 к значению системной нагрузки. Не имеет значения, каков процесс хороший уровень, потому что средняя длина очереди выполнения незатронута по приказу процессов в очереди выполнения.

2
16.01.2015, 10:11
3 ответа

Вы можете использовать встроенный встроенный для оценки имени переменной. Пример, который иллюстрирует точку:

i="a"
eval ${i}lphabet="abcde"
echo $alphabet

Однако, извлечение значения из $ {I} lphabet , требует другого трюка. Вы должны использовать значение переменной в качестве имени переменной (по существу указатель). Синтаксис будет:

#declare a variable that names the other variable:
pointer=${i}lphabet
#dereference the name with the ! syntax:
echo ${!pointer}

применяется к вашему случаю:

for i in ${alphabet[@]}; do
    pointer="$i"array
    eval ${pointer}[0]=0
done

Однако это плохой дизайн ... Вы должны найти более обычный способ обращения с этим.

1
27.01.2020, 22:00

Вам придется использовать EVAL Использование содержимого переменных в качестве имени переменных:

for i in ${alphabet[@]}; do
    eval "$i[0]=1"
done

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

1
27.01.2020, 22:00

Могу ли я предложить другим способом (через ассоциативный массив) для выполнения вашей задачи? Это кажется более умным и приемлемым:

declare -A array
for i in ${alphabet[@]}; do
  array[$i]=0
  # or array[${i}0]=0 if you need 
done

, чтобы вы могли пережить его через для I в $ {! Array [@]} или так же для I в $ {Alphabet [@]}

2
27.01.2020, 22:00

Теги

Похожие вопросы