在 echo 中抑制 * 的扩展

div*_*gon 3 mysql command-line-interface unix-shell echo shell-scripting

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

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

+---------------+-------------------------------+---------+
| query_name    | query                         | userid  |
+---------------+-------------------------------+---------+
| All_User      | select * from users LIMIT 10; | jmatthe |
+---------------+-------------------------------+---------+
Run Code Online (Sandbox Code Playgroud)

现在,我必须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)
Run Code Online (Sandbox Code Playgroud)

现在这里是问题出现的地方。因为我的行中包含一个*字符,所以echo $query扩展*以将其替换为当前目录中的文件。所以基本上,我的query_sql商店是这样的。

select batchemail.sh query_output.txt from tbl_query
Run Code Online (Sandbox Code Playgroud)

我想保留*行中的 ,以便在我的query_sql变量中得到相同的结果。我希望我的query_sql变量存储原始数据。

select * from tbl_query
Run Code Online (Sandbox Code Playgroud)

有人可以指导我吗?

Kha*_*led 9

您可以通过在脚本中添加以下行来禁用它:

set -o noglob
Run Code Online (Sandbox Code Playgroud)

举个例子,

echo *
your files and folders are shown here..
set -o noglob
echo *
*
Run Code Online (Sandbox Code Playgroud)


poi*_*ige 8

你可以把它放在“”中:

$ 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;
Run Code Online (Sandbox Code Playgroud)