我正在编写一个每天动态执行一些查询的脚本。这些查询来自数据库中的表。
以下是查询表的示例输出:
+---------------+-------------------------------+---------+
| query_name | query | userid |
+---------------+-------------------------------+---------+
| All_User | select * from users LIMIT 10; | jmatthe |
+---------------+-------------------------------+---------+
现在,我必须select * from users LIMIT 10;
动态执行查询。我正在读取输出的每一行并存储输出中的查询。
query_name=$(echo $query | cut -d\| -f1)
query_sql=$(echo $query | cut -d\| -f2)
query_user=$(echo $query | cut -d\| -f3)
现在问题就出现在这里。因为我的行*
中包含一个字符,echo $query
所以展开 来*
将其替换为当前目录中的文件。基本上,我的query_sql
商店是这样的。
select batchemail.sh query_output.txt from tbl_query
我想保留*
行中的内容,以便我在query_sql
变量中得到相同的内容。我希望我的query_sql
变量存储原始数据。
select * from tbl_query
有人可以指导我吗?
答案1
在变量周围使用双引号:
query_name=$(echo "$query" | cut -d\| -f1)
query_sql=$(echo "$query" | cut -d\| -f2)
query_user=$(echo "$query" | cut -d\| -f3)
答案2
使用 set -f 禁用通配符:
$ q='select * from users LIMIT '
$ set -f
$ echo $q
select * from users LIMIT