首页 > 解决方案 > 带变量的 curl 不起作用 - Shell 脚本

问题描述

当我通过 shell 脚本 functioniert es 执行正常 curl 时。

这项工作:

curl -s -v -X POST --data '{
    "zoneConfig": {
        "userID": "'$userid'",
        "name": "'$myName'",
        "id":"'$id'"
    },
    "delete": [
        {
            "id": "ID1"
        },
        {
            "id": "ID2"
        }
    ]
}' https://urlToAPI

但是,一旦我将“删除”放入变量中,我就会从 API 供应商那里得到一个未定义的错误

这是行不通的

delete='{
    "id": "ID1"
},
{
    "id": "ID2"
}'

curl -s -v -X POST --data '{
    "zoneConfig": {
        "userID": "'$userid'",
        "name": "'$myName'",
        "id":"'$id'"
    },
    "delete": [
        '$deleteValues'
    ]
}' https://urlToAPI

但我不明白两者的区别,因为两种配置是一样的?

标签: shellcurlsh

解决方案


插值时,值在空白处拆分。[1]

像这样,

a='a b c'
prog $a

相当于

prog 'a' 'b' 'c'

如果插值发生在双引号内,则不会发生这种拆分。

像这样,

a='a b c'
prog "$a"

相当于

prog 'a b c'

因此,您需要更改

$deleteValues

"$deleteValues"

  1. 准确地说,IFSenv var 控制值的拆分方式。它通常设置为在空格、制表符和换行符上发生拆分。

推荐阅读