看过很多相关的帖子,但没有任何帮助我解决我的问题。我在bash脚本中有一个CURL命令。 Data元素包含SQL命令。 SQL命令包含一个必须单引号的参数。所以,它看起来像这样:
jsonData=$(curl --request POST \
--url $uribase/Redrock/Query \
--header 'content-type: application/json' \
--header 'X-NATIVE-CLIENT: 1' \
--data '{"Script":"'"Select Server.ID, Server.ComputerClass, Server.FQDN, Server.Name, Server.SessionType from Server WHERE Server.ComputerClass='Unix' COLLATE NOCASE"'"}')
我在引用Server.ComputerClass值时尝试了很多变化无济于事。我无法让它解决=' Unix'。甚至尝试过unicode。 任何帮助表示赞赏。
答案 0 :(得分:0)
不是试图正确引用它,而是通过标准输入从此文档中将其提供给curl
。使用数组可以更清晰地组织选项。
curl_opts=( --request POST
--url "$uribase/Redrock/Query"
--header 'content-type: application/json'
--header 'X-NATIVE-CLIENT: 1'
--data @-
)
@-
告诉curl
从名为-
的文件中读取数据,该文件是curl
定义的标准输入别名。
jsonData=$(curl "${curl_opts[@]}" <<EOF
{ "Script": "Select Server.ID, Server.ComputerClass, Server.FQDN, Server.Name, Server.SessionType from Server WHERE Server.ComputerClass='Unix' COLLATE NOCASE"}
EOF
)
答案 1 :(得分:0)
引用快速混乱。是的,使用文件存储语句将起作用;如果你不想这样做,那么你可以试试这里。
创建一个函数:
sql_request()
{
printf "'{"
printf '"Script"'
...
}
你得到了一般的想法:根据需要将它分解成多个部分;如果你需要一个单引号用双引号括起来,当你需要双引号时,用单引号括起来。
然后,您可以根据需要调用该功能以获取您的请求:
"$(sql_request)"
您甚至可以轻松地将参数提供给此函数以更改字符串的部分内容。