喜欢if中的条款

时间:2012-03-26 12:12:41

标签: bash shell if-statement

以下是按预期工作的。

for schema in `mysql -e"show databases"`
do
if [[ $schema = 'test' ]];then
echo $schema
fi
done

但是当我需要选择以test开头的所有值时,由于明显的原因,以下内容不起作用......

if [[ $schema = 'test%' ]];then

我想选择其他值,如test_db,test123等。

4 个答案:

答案 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 )