2

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?

  • In zsh: noglob echo * – Emanuel Berg Apr 16 '13 at 23:10
1

Use set -f to disable globbing:

$ q='select * from users LIMIT '
$ set -f
$ echo $q
select * from users LIMIT
  • Thanks. Too bad. I thought escaping the * would help me, but now the query doesn't work. – divinedragon Apr 16 '13 at 11:22
  • I have a strange feeling... How do you run the query? – TNW Apr 16 '13 at 16:02
11

Use double quotes around the variable:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.