3

I am working on a script which dynamically executes some queries on daily basis. These queries are coming from a table in the database.

Here is the sample output of the query table:

+---------------+-------------------------------+---------+
| query_name    | query                         | userid  |
+---------------+-------------------------------+---------+
| All_User      | select * from users LIMIT 10; | jmatthe |
+---------------+-------------------------------+---------+

Now, I have to execute the query select * from users LIMIT 10; dynamically. I am reading each line of the output and storing the query from the output.

query_name=$(echo $query | cut -d\| -f1)
query_sql=$(echo $query | cut -d\| -f2)
query_user=$(echo $query | cut -d\| -f3)

Now here is where the problem arises. Because my line contains a * character in it, echo $query expands the * to replace it with the files in the current directory. So basically, my query_sql stores something like this.

select batchemail.sh query_output.txt from tbl_query

I want to preserve the * in the line so that I get the same in my query_sql variable. I want my query_sql variable to store the original data.

select * from tbl_query

Can anybody guide me on this?

divinedragon
  • 133
  • 4

2 Answers2

9

You disable it by adding the following line in your script:

set -o noglob

As an example,

echo *
your files and folders are shown here..
set -o noglob
echo *
*
Khaled
  • 35,688
  • 8
  • 69
  • 98
  • Too bad. I thought escaping the * would help me, but now the query doesn't work. – divinedragon Apr 16 '13 at 11:25
  • @divinedragon I don't understand your comment. What are you talking about? Does "now the query doesn't work" refer to the `set -o noglob` proposal or to something completely different which you did but didn't mind telling us...? – Hauke Laging Apr 16 '13 at 11:28
  • I thought making the query as ````select \*```` would help me and the ````*```` would not expand. But later on, the ````select \*```` query didnt run on MySQL. With your option, I was able to do that. – divinedragon Apr 16 '13 at 12:50
8

You can put it into "":

$ 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;
poige
  • 9,171
  • 2
  • 24
  • 50