Linux Mint 17 коричных замораживаний после установки драйверов Nvidia?

Вы используете эту конструкцию:

b=("${!arrname}")

Это разворачивает значения массива, создавая новый массив b[] с индексами массива значения по умолчанию удара, запускающимися от 0. Для надлежащей инициализации копии массива, необходимо было бы восстановить индексы (например, путем парсинга или eval- луг вывод declare -p arrname)

Вместо того, чтобы делать копию, лучший подход должен развернуть индексы, а не значения, и выполнить итерации по массиву с помощью тех. Этот подход будет работать с редкими, или ненулевыми основанными стандартными массивами (и даже bash4 ассоциативные массивы).

Выгода (не там всегда) то, что ! вытягивает двойную обязанность: его использование в косвенности ${!name} не совместимо с его использованием для расширения индексов массива ${!arrname[@]}, таким образом, мы должны использовать eval.

Вот измененная версия, которая реализует это:

getIndex2() {
  local arrname=$1 iidx idxs index ival val
  printf -v iidx '"${!%s[@]}"' "$arrname"
  eval "idxs=($iidx)"
  for index in "${idxs[@]}"; do
    printf -v ival '${%s[%s]}' "$arrname" "$index"
    eval "val=$ival"
    if [[ "${val}" = "$VALUE" ]]; then
        echo "index is $index"; return   
    fi
  done
}

Отметьте использование printf -v var ... (колотите 3.1 +) пытаться сохранить eval читаемый. Индексы расширены в массив, это не строго необходимо, плоский список сделал бы также.

См. также BashFAQ/006.

3
15.08.2014, 14:20
1 ответ

У меня такая же проблема с моим 660м. Прошлой ночью я попробовал установку шмель , и это , кажется , чтобы облегчить проблему. Я использовал этот (очень грубый) учебник . Это позволит вам идти в правильное направление в любом случае.

Опять же, я не могу 100% подтвердить, что это работает, но, похоже, работает. После того, как после этого, и перезапускаясь, я был на моем ноутбуке в течение хороших 6 часов без проблем.

1
27.01.2020, 21:31

Теги

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