Ваше регулярное выражение не принимает строчные буквы как действительные. Вот фиксированная версия:
#!/bin/bash
uuid="7632f5ab-4bac-11e6-bcb7-0cc47a6c4dbd"
if [[ $uuid =~ ^\{?[A-F0-9a-f]{8}-[A-F0-9a-f]{4}-[A-F0-9a-f]{4}-[A-F0-9a-f]{4}-[A-F0-9a-f]{12}\}?$ ]]; then
echo "true"
else
echo "false"
fi
Прежде всего, вы только действительно нужно искать A-F
не A-Z
потому UUID, содержат шестнадцатеричные цифры.
Обратите внимание на добавление a-f
в каждом классе символов. Ваша версия отклонит любой UUID, который будет напечатан в нижнем регистре. Эта новая версия отлично работает для меня сейчас. Альтернативное решение - использовать только верхний регистр UUID, а не нижний регистр, который у вас есть. По этим причинам ваши классы [A-Z0-9]
были заменены на [A-F0-9a-f]
.
См. Сообщение от Ekeyme Mo для соображений безопасности.
Вы сделали ошибку в своем регулярном выражении. См. Мой недавно отредактированный ответ. –