If you want the '$dbserver'query to expand inside the loop, you probably write:
while read dbserver username password dbname type
do
query="select '$dbserver' as server;"
mysql -h$dbserver -u$username -p$password $dbname -Be"$query"
done < $dblist > /home/develop/myreport.csv
As originally written, the query string is evaluated before any value is assigned $dbserver, so you got an empty string in the output.
, - done, ( , ).
, , -, , eval. , $dbserver , . ( SQL), eval:
query='select \"$dbserver\" as server;'
echo "$query"
while read dbserver username password dbname type
do
echo 1: "$query"
eval echo 2: "$query"
qval=$(eval echo "$query")
echo mysql -h$dbserver -u$username -p$password $dbname -Be"$qval"
done
, """ "'\''":
query='select \'\''$dbserver\'\'' as server;'
echo "$query"
while read dbserver username password dbname type
do
echo 1: "$query"
eval echo 2: "$query"
qval=$(eval echo "$query")
echo mysql -h$dbserver -u$username -p$password $dbname -Be"$qval"
done
, , , - , ! [... ...] !
:
- .
- escape-.
- , - .
- 4 -
'\''. - .
- , .
- .
- , .
- $dbserver - .
- , .
- .
eval . ; $dbserver. .
eval , . MySQL, , . , eval. , , :
query='select \'\''$dbserver\'\'' as server, \`ls\` as column;'
echo "$query"
while read dbserver username password dbname type
do
echo 1: "$query"
eval echo 2: "$query"
qval=$(eval echo "$query")
echo mysql -h$dbserver -u$username -p$password $dbname -Be"$qval"
done
, .