我正在尝试获取服务器上用于备份的所有数据库的列表。下面是我试图打印数据库列表的代码片段,但我得到了错误。怎么修呢?添加双方括号并不能解决这个问题。
我曾研究过一些类似的问题,但我想不出。
grep:字符类语法是[:space:],不是:space:
#!/bin/sh -
IFS='
'
OLDPATH="$PATH"
PATH=/sbin:/bin:/usr/bin
export PATH
MUSER=root
MPASS='sfdsfdf'
DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' | grep [:alphnum:] | grep -v Database)
for base in ${DBLIST}; do
echo $base
done发布于 2019-02-10 02:49:27
产生错误的行是:
DBLIST=$(mysql -u${MUSER} -p${MPASS} -e 'show databases;' |\
grep [:alphnum:] | grep -v Database)当第一个grep运行时,它会注意到在冒号之间有一个包含文本的括号。它猜测用户打算在括号表达式中放置一个字符类,并给出一个正确方法的示例。
括号表达式是编写[列表的字符]。
编写了一个字符类:[:class:]作为类的一些值。
角色类(如:[:space:])的使用方法是将放在内,这是一个括号表达式,以及要匹配的任何其他字符。因此,要匹配空格和数字1到3,可以写:[[:space:]123]
不幸的是,代码中还有另一个错误,即没有像"alphnum“这样的字符类。所以纠正括号是没有帮助的!
但是有一个类:[:alnum:]
如果这是预期的类,则应将第一个grep修改为:
grep [[:alnum:]]请注意,shell专门处理括号(它们可以扩展为文件名),因此引用任何事件都更安全:
grep '[[:alnum:]]'https://stackoverflow.com/questions/54612630
复制相似问题