Bash

在迴聲中抑制 * 的擴展

  • April 17, 2013

我正在編寫一個每天動態執行一些查詢的腳本。這些查詢來自數據庫中的一個表。

這是查詢表的範例輸出:

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

有人可以指導我嗎?

使用 set -f 禁用萬用字元:

$ q='select * from users LIMIT '
$ set -f
$ echo $q
select * from users LIMIT

在變數周圍使用雙引號:

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

引用自:https://unix.stackexchange.com/questions/72602