bash script curl命令中的单引号不断转换为双引号

时间:2017-01-20 00:27:04

标签: sql linux bash curl

看过很多相关的帖子,但没有任何帮助我解决我的问题。我在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。 任何帮助表示赞赏。

2 个答案:

答案 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)"

您甚至可以轻松地将参数提供给此函数以更改字符串的部分内容。