如何执行包含引号和双引号组合的命令?
How can I execute a command which has a combination of quotes and double quotes?
我的脚本的目的是向 Mattermost 服务器发送消息。
所以我使用 curl 来这样做:
#!/bin/bash
message="This is my message with potentially several quotes in it ..."
url=http://www.myMatterMostServer.com/hooks/myMattermostKey
payload="{ \"text\" : \"$message\" }"
curlCommand="curl --insecure --silent --show-error --header 'Content-Type: application/json' -X POST --data '"$payload"' "$url
echo -e $curlCommand
$curlCommand
echo 命令显示了一些可执行的东西,如果我复制它并直接在终端中执行它。
但是最后一行没有正确执行,我在控制台中有这个:
++ curl --insecure --silent --show-error --header ''\''Content-Type:' 'application/json'\''' -X POST --data ''\''{' '"text"' : '"This' is my message with potentially several quotes in it '..."' '}'\''' http://poclo7.sii24.pole-emploi.intra/hooks/iht8rz8uwf81fgoq9ser8tda3y
curl: (6) Couldn't resolve host 'application'
curl: (6) Couldn't resolve host '"text"'
curl: (6) Couldn't resolve host ':'
curl: (6) Couldn't resolve host '"This'
curl: (6) Couldn't resolve host 'is'
curl: (6) Couldn't resolve host 'my'
curl: (6) Couldn't resolve host 'message'
curl: (6) Couldn't resolve host 'with'
curl: (6) Couldn't resolve host 'potentially'
curl: (6) Couldn't resolve host 'several'
curl: (6) Couldn't resolve host 'quotes'
curl: (6) Couldn't resolve host 'in'
curl: (6) Couldn't resolve host 'it'
curl: (6) Couldn't resolve host '..."'
我尝试了很多引号、双引号和 $(command) 的组合...请帮助我:-)
变量用于数据,而不是代码。参见 Bash FAQ 50。改为定义一个函数。
curlCommand () {
message=
url=
payload='{"text": "$message"}'
curl --insecure --silent --show-error \
--header 'Content-Type: application/json' \
-X POST --data "$payload" "$url"
}
curlCommand "This is my message with potentially several quotes in it ..." http://www.myMatterMostServer.com/hooks/myMattermostKey
考虑使用 jq
生成负载以确保 $message
的内容被正确转义。
payload=$(jq --arg msg "$message" '{text: $msg}')
或将 jq
的输出直接传送到 curl
:
jq --arg msg "$message" '{text: $msg}' | curl ... --data @- ...
我的脚本的目的是向 Mattermost 服务器发送消息。 所以我使用 curl 来这样做:
#!/bin/bash
message="This is my message with potentially several quotes in it ..."
url=http://www.myMatterMostServer.com/hooks/myMattermostKey
payload="{ \"text\" : \"$message\" }"
curlCommand="curl --insecure --silent --show-error --header 'Content-Type: application/json' -X POST --data '"$payload"' "$url
echo -e $curlCommand
$curlCommand
echo 命令显示了一些可执行的东西,如果我复制它并直接在终端中执行它。
但是最后一行没有正确执行,我在控制台中有这个:
++ curl --insecure --silent --show-error --header ''\''Content-Type:' 'application/json'\''' -X POST --data ''\''{' '"text"' : '"This' is my message with potentially several quotes in it '..."' '}'\''' http://poclo7.sii24.pole-emploi.intra/hooks/iht8rz8uwf81fgoq9ser8tda3y
curl: (6) Couldn't resolve host 'application'
curl: (6) Couldn't resolve host '"text"'
curl: (6) Couldn't resolve host ':'
curl: (6) Couldn't resolve host '"This'
curl: (6) Couldn't resolve host 'is'
curl: (6) Couldn't resolve host 'my'
curl: (6) Couldn't resolve host 'message'
curl: (6) Couldn't resolve host 'with'
curl: (6) Couldn't resolve host 'potentially'
curl: (6) Couldn't resolve host 'several'
curl: (6) Couldn't resolve host 'quotes'
curl: (6) Couldn't resolve host 'in'
curl: (6) Couldn't resolve host 'it'
curl: (6) Couldn't resolve host '..."'
我尝试了很多引号、双引号和 $(command) 的组合...请帮助我:-)
变量用于数据,而不是代码。参见 Bash FAQ 50。改为定义一个函数。
curlCommand () {
message=
url=
payload='{"text": "$message"}'
curl --insecure --silent --show-error \
--header 'Content-Type: application/json' \
-X POST --data "$payload" "$url"
}
curlCommand "This is my message with potentially several quotes in it ..." http://www.myMatterMostServer.com/hooks/myMattermostKey
考虑使用 jq
生成负载以确保 $message
的内容被正确转义。
payload=$(jq --arg msg "$message" '{text: $msg}')
或将 jq
的输出直接传送到 curl
:
jq --arg msg "$message" '{text: $msg}' | curl ... --data @- ...