Чтобы сопоставить любую не -пустую строку символов, не содержащую ]
, используйте [^]]+
.
Использование [^\]]*
будет соответствовать не -\
, за которым следует ноль или более ]
. Вот почему вам удалось разобрать 1
и 2
, но не другие строки.
Переменная IFS
не используется в вашем первом фрагменте кода. Переменные внутри [[... ]]
не нуждаются в двойных кавычках.
Чтобы напечатать отдельные элементы массива, используйте
printf '%s\n' "${MATCHES[@]}"
или
for elem in "${MATCHES[@]}"; do
printf '%s\n' "$elem"
done
Просто $MATCHES
расширится только до первого элемента массива (и применит разбиение на слова и подстановку имени файла к значению ).
Благодаря комментариям @cas у меня все получилось.
Этапы в основном:
/dev/sda1
и/dev/sdb1
/boot/efi
куда-то еще(/boot/eficopy
). umount /boot/efi
mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 --metadata=0.90 /dev/sda1 /dev/sdb1
. Конечно, измените /dev/md3
на что-то другое, если /dev/md3
уже является активным устройством MD mkfs.vfat /dev/md3
/dev/disk/by-uuid
/boot/efi
в /etc/fstab
на новый UUID mount /boot/efi
/boot/efi
Перезагрузка сработала.
РЕДАКТИРОВАТЬ:Вместо резервного копирования раздела /boot/efi
кажется, что
grub-install --efi-directory=/boot/efi
выполняет работу по восстановлению своего содержимого (на шаге 9 выше ), хотя я получил много предупреждений, которые не могу понять.