【发布时间】:2020-01-13 17:02:38
【问题描述】:
我有一个 bash 脚本,我试图在其中调用一个以变量值作为输入的 curl。尝试执行 bash 脚本时,变量值没有在双引号中展开。
变量扩展后脚本中的预期卷曲应该如下:
/usr/bin/curl -s -vvvv http://hmvddrsvr:8044/query/service -u iamusr:pssd -d 'statement=DELETE FROM `test_bucket` WHERE type = "Metadata" AND market = "ES" AND status = "active" AND meta(test_bucket).id="fgsd34sff334" '
在调试模式下观察时执行如下:
/usr/bin/curl -s -vvvv http://hmvddrsvr:8044/query/service -u iamusr:pssd -d 'statement=DELETE FROM `test_bucket` WHERE type = "Metadata" AND market = "ES" AND status = "active" AND meta(test_bucket).id=\""$idp_sub"\" '
我的 bash 脚本如下:
#!/bin/bash
idp_sub=""
for idp_sub in $(cat /opt/SP/jboss/home/mayur/es_idp_sub.txt)
do
/usr/bin/curl -s -vvvv http://hmvddrsvr:8044/query/service -u iamusr:pssd -d 'statement=DELETE FROM `test_bucket` WHERE type = "Metadata" AND market = "ES" AND status = "active" AND meta(test_bucket).id=\""$idp_sub"\" ' -o /opt/SP/jboss/home/mayur/es_delete_response.txt
done
如何在双引号内扩展变量值,如上所示的预期输出?
【问题讨论】:
-
不要使用字符串插值来构造 SQL 查询。使用具有适当 SQL 库的语言来创建参数化查询。
-
至少,使用新语言的库来构建 URL 以确保您的查询正确地进行 URL 转义,此外还要确保生成的查询是有效且安全的 SQL。
-
这里没有什么需要进行 URL 转义的;唯一的非常量部分在
-d参数内,该参数将作为application/x-www-form-urlencoded发布。