以下是按预期工作的。
for schema in `mysql -e"show databases"`
do
if [[ $schema = 'test' ]];then
echo $schema
fi
done
但是当我需要选择以test开头的所有值时,由于明显的原因,以下内容不起作用......
if [[ $schema = 'test%' ]];then
我想选择其他值,如test_db,test123等。
答案 0 :(得分:6)
你可以使用bash正则表达式:
if [[ $schema =~ ^test ]]; then
答案 1 :(得分:2)
你可以在bash
中使用通配符(正则表达式):
pax> if [[ test123 =~ ^test.* ]] ; then echo yes ;fi
yes
来自bash
联机帮助页:
可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应匹配(如在regex(3)中)。
如果字符串与模式匹配,则返回值为0,否则返回1。如果正则表达式在语法上不正确,则条件表达式的返回值为2.
如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况。可以引用模式的任何部分以强制它匹配为字符串。
与正则表达式中带括号的子表达式匹配的子字符串保存在数组变量BASH_REMATCH中。索引为0的BASH_REMATCH元素是与整个正则表达式匹配的字符串部分。索引为n的BASH_REMATCH元素是与第n个带括号的子表达式匹配的字符串部分。
答案 2 :(得分:1)
普通的shell模式也可以工作,因为这并不需要正则表达式:
if [[ $schema == test* ]]; ...
请参阅[[ ]]
- http://www.gnu.org/software/bash/manual/bashref.html#index-g_t_005b_005b-57
答案 3 :(得分:1)
另一种选择是移动支票并执行:
for schema in $( mysql -e"show databases" | grep ^test )