抑制 echo 中 * 的扩展

抑制 echo 中 * 的扩展

我正在编写一个每天动态执行一些查询的脚本。这些查询来自数据库中的表。

以下是查询表的示例输出:

+---------------+-------------------------------+---------+
| 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

相关内容