从数组中排除字符串项

时间:2013-04-10 20:04:02

标签: linux shell

我有一个脚本,我想从第二个列表中指定的数组中删除项目,我有以下代码,但它不起作用:

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

1 个答案:

答案 0 :(得分: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循环只执行一次,并且比较是使用文本&#34;数据库[0]&#34;而不是值。