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
4

1 回答 1

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]”,而不是值。

于 2013-04-10T20:58:10.613 回答