逃离从Linux Shell运行的sql脚本的$

时间:2014-06-05 11:28:04

标签: mysql sql linux shell escaping

我正在尝试从linux shell执行一个insert语句,其中一列有' $ 2a $ 10 $ zKjqmgld1gDYB / qkDuAS'在价值中。当我看到插入的数据时,该值被截断,我只得到了aKjqmgld1gDYB / qkDuAS'因为任何数字后跟美元被linux视为传递给脚本的参数。

这就是我执行脚本的方式

mysql -u user --password=password -e "insert into users(id,name,password) values(1,'Some Name','\$2a\$10\$zKjqmgld1gDYB/qkDuAS')"

我甚至试图逃避$,如$ $ \ $ 10 \ $ zKjqmgld1gDYB / qkDuAS,但它仍会产生相同的截断数据,但是当我回显时,#$ 2a \ $ 10 \ $ zKjqmgld1gDYB / qkDuAS& #39;,我把整个事情都归还了。

萨米尔

2 个答案:

答案 0 :(得分:0)

单引号不嵌套在shell中(无论如何,它们是否在其他地方?)。所以,你的字符串实际上在引号之外。结合双引号和反斜杠:

mysql -u user --password=password -e \
   "insert into users(id,name,password) values(1,'Some Name','\$2a$10\$zKjqmgld1gDYB/qkDuAS')"

答案 1 :(得分:0)

它已经是双引号(抱歉,写错了查询)。这也没有用,但是我找到了一个解决方法 echo "insert into users(id,name,password) values(1,'Some Name','\$2a\$10\$zKjqmgld1gDYB/qkDuAS')" >> temp.sql mysql -u user --password=password < temp.sql

这终于奏效了。