我目前正在开发一个带有bash脚本的迁移脚本。当我试图通过bash脚本中的变量打开数据库时,数据库名是不正确的。我得到了以下错误“RROR 1102 (42000):不正确的数据库名‘开发’
mysql --batch --host=********** --user=**** --password=***** $dbName -e "${fileContents}"当我在bash脚本中这样做时,数据库就存在了。
mysql --batch --host=********** --user=**** --password=***** development -e "${fileContents}"变量fileContents是SQL中的迁移脚本。变量dbName是数据库的名称。
我通过以下行从数据库中的一个表中获取数据库名称
databaseNames=()
shopt -s lastpipe
mysql --batch --raw --host=***** --user=**** --password=***** -e 'SELECT database_name FROM users.organisations' | while read dbName guid; do
if [ $i -gt 0 ]
then
databaseNames+=($dbName)
fi
i=$(($i + 1))
done数据库数组中的名称似乎是正确的,但我认为数组会把事情搞砸。循环数组如下所示。
for dbName in "${databaseNames[@]}" do发布于 2022-02-23 18:30:29
数组是空的。您必须将while循环更改为
while read dbName guid; do
databaseNames+=($dbName)
done < <(mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="yourdatabase" -e 'SELECT database_name FROM users.organisations;')然后
for dbName in "${databaseNames[@]}"
do
echo $dbName
mysql --batch --raw --host=$host --port=$port --user=$user --password=$password --database="$dbName" -e '${fileContents};')
donehttps://stackoverflow.com/questions/71240806
复制相似问题