2013-04-10 80 views
1

我有一个剧本,我想从在第二列表中指定的数组中删除的项目,我有以下的代码,但它不工作:排除串项目

db_exclude=('information_schema' 'mysql') 

databases=$(/usr/bin/mysql --defaults-extra-file=/etc/unimicrosys/sqlbackup/my.cnf -e 'show databases' -s --skip-column-names) 
length=${#databases[@]} 

for exclude in $db_exclude[@]; do 
    for ((i=0; i<$length; i++)); do 
     echo $i 
     if [[ databases[$i] = $exclude ]]; then 
      unset $databases[$i]; 
     fi; 
    done 
done 
+0

你得到了我的+1。 – 2013-04-10 22:20:03

+0

我想@parkydr已经发现了你的遗漏('$ {databases [$ i]}')。将来,您可能会通过使用shell调试功能'set -vx'或仅显示可变扩展名'set -x'来查看问题出在哪里。祝你好运。 – shellter 2013-04-11 03:09:15

+0

是啊调试对我来说很难,我已经习惯了C#和visual studio!感谢您的帮助 – g18c 2013-04-11 14:13:42

回答

2

我不能”牛逼检查命令产生阵列的MySQL,但是这个作品,如果数据库被设置为一个数组

db_exclude=('information_schema' 'mysql') 

databases=('aaaa' 'information_schema' 'bbb' 'mysql' 'ccc') 

length=${#databases[@]} 

for exclude in ${db_exclude[@]}; do 
    for ((i=0; i<$length; i++)); do 
     echo $i 
     if [[ ${databases[$i]} = $exclude ]]; then 
      unset databases[$i]; 
     fi; 
    done 
done 

echo ${databases[@]} 

我通过运行带有bash -x脚本这表明在for循环只执行一次,发现问题和比较是与文本“数据库[0]”,而不是值。