cryptsetup luksRemoveKey
только удалил бы ключ шифрования, если бы у Вас был больше чем один. Шифрование все еще было бы там.
Fedora Раздел Installation_Guide C.5.3 объясняет как luksRemoveKey
работы.
То, что "невозможно" удалить шифрование, в то время как хранение содержания является просто образованным предположением. Я основываю это на двух вещах:
Вы используете эту конструкцию:
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.
Массивы в Bash основаны на нуле. Они просто. Тем не менее, если Вы знаете, что массив всегда будет индексированным числами, запускающимися от 1, просто добавьте +1 к результату. Добавьте второй аргумент функции, которая скажет его, какое число начать с или добавить к результату, и добавляют разумное значение по умолчанию для случаев, где второй аргумент отсутствует. Или цикл по индексам как mr.spuratic предлагает.
declare -A
Вы всегда получаете нормальные индексные массивы. Это - просто, состоящее из нескольких несмежных участков. gnu.org/software/bash/manual/html_node/Arrays.html.
– Arthur2e5
06.12.2015, 00:44