我无法转义包含控制字符的字符串
testRESULT=$(awk -F"Executed " '/Executed /{print $2}' results.out)
这是30秒内10个规格不完整(1个待处理)中的字符串9。
这是使用cmd的地方
curl -X POST -u ${JIRATOKEN} -H Content-Type:application/json --data '{"body":"'"$testRESULT"'- SauceLabs results available at '"\n$sauceLabsURL"'"}' https://EXAMPLEURL
这是错误
{"errorMessages":["Illegal unquoted character ((CTRL-CHAR, code 27)): has to be escaped using backslash to be included in string value\n at [Source: org.apache.catalina.connector.CoyoteInputStream@436d6c79; line: 1, column: 24]"]}
什么是清除Bash变量的最佳方法,该变量可以包含要传递给curl JSON的任何类型的char
答案 0 :(得分:0)
错误所抱怨的字符是ASCII转义。您要逃避还是删除它?
我以为罪魁祸首是$testRESULT
。
要删除它的\27
字符:
testRESULT="${testRESULT//$'\27'/}"
转义它(这将使整个字符串转义):
printf -v testRESULT '%q' "$testRESULT"
或仅转义ASCII转义:
ascii_esc='\27' # literal (change to the form that is expected)
testRESULT="${testRESULT//$'\27'/$ascii_esc}"
然后,我将长的JSON字符串分解为一个数组,并在curl
命令中使用array变量。这将使事情更具可读性和可维护性。并且不要忘记引用您的变量。
jsonstring=(
'{"body":"'
"$testRESULT"
'- SauceLabs results available at '
"\n$sauceLabsURL"
'"}'
)
curl -X POST -u "$JIRATOKEN" -H Content-Type:application/json --data "${jsonstring[@]}" https://EXAMPLEURL
但是最终,您应该考虑使用适合该工作的工具(例如Python库等)来使用JSON。