1

2 番目のリストで指定された配列から項目を削除するスクリプトがあります。次のコードがありますが、機能しません。

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 -xforループが1回だけ実行され、値ではなくテキスト「database [0]」と比較されることを示すスクリプトを実行して、問題を発見しました。

于 2013-04-10T20:58:10.613 に答える