Строка, вызывающая ошибку:
DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |\
grep [:alphnum:] | grep -v Database)
Когда запускается первый grep, он замечает, что между двоеточиями есть пара скобок, содержащих текст.Предполагается, что пользователь намеревался поместить класс символов в выражение в скобках, и приводит пример правильного способа сделать это.
Выражение в скобках записывается [
список символов ]
.
Класс символов записывается: [:
class :]
для некоторого значения класса.
Класс символов (например, [:space:]
) используется путем помещения его в выражение в скобках вместе с любыми другими символами, которые должны быть сопоставлены.Таким образом, чтобы сопоставить пробел и цифры от одной до трех, можно написать: [[:space:]123]
К сожалению, в коде есть еще одна ошибка, заключающаяся в том, что нет такого класса символов, как "alphnum".Таким образом, исправление брекетинга не помогает!
Однако существует класс: [:alnum:]
Если этот класс предназначен, первый grep должен быть изменен на:
grep [[:alnum:]]
Обратите внимание, что оболочка обрабатывается специально оболочкой (они могут расширяться до имен файлов), поэтому безопаснее заключать в кавычки любые случаи:
grep '[[:alnum:]]'