![抑制 echo 中的 * 扩展](https://linux22.com/image/800868/%E6%8A%91%E5%88%B6%20echo%20%E4%B8%AD%E7%9A%84%20*%20%E6%89%A9%E5%B1%95.png)
我正在编写一个脚本,该脚本每天动态执行一些查询。这些查询来自数据库中的表。
以下是查询表的示例输出:
+---------------+-------------------------------+---------+
| 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
您可以通过在脚本中添加以下行来禁用它:
set -o noglob
举个例子,
echo *
your files and folders are shown here..
set -o noglob
echo *
*
答案2
您可以将其放入“”中:
$ ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
$ Q='select * from table;'
$ echo $Q
select file1 file2 file3 file4 file5 file6 file7 file8 file9 from table;
$ echo "$Q"
select * from table;