Bash
在迴聲中抑制 * 的擴展
我正在編寫一個每天動態執行一些查詢的腳本。這些查詢來自數據庫中的一個表。
這是查詢表的範例輸出:
+---------------+-------------------------------+---------+ | 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)