导出添加额外的字符

export adding extra characters

我正在尝试从 sauce labs 获取我的隧道 ID...为此,我正在执行以下操作:

SAUCE_TUNNELL_IDENTIFIER=$(curl https://saucelabs.com/rest/v1/myusername/tunnels -u myusername:mykey)

这个returns["my-tunnel-id"]

所以我想去掉 [] 并导出我的隧道 ID..

这里是[]

的导出和删除
export SAUCE_TUNNELL_IDENTIFIER=$(echo $SAUCE_TUNNELL_IDENTIFIER | awk '{print substr([=11=], 2, length([=11=]) -2)}')

当我做一个 export -p 时,我看到它是这样的 "\"my-tunnel-id\""

但是如果我只执行 echo $SAUCE_TUNNELL_IDENTIFIER,我在我的变量中看不到 exta "\。这是从哪里来的?此外,任何帮助将其变成一个更好的命令的人也将不胜感激! :)

服务器正在返回一个 JSON 数组;你可以使用 jq 之类的东西来提取数组中的单个元素,但对于这么简单的事情,你可以只使用参数扩展。

$ SAUCE_TUNNELL_IDENTIFIER=$(curl https://saucelabs.com/rest/v1/myusername/tunnels -u myusername:mykey)
$ SAUCE_TUNNELL_IDENTIFIER=${SAUCE_TUNNELL_IDENTIFIER//[]\"[]}
$ echo "$SAUCE_TUNNELL_IDENTIFIER"
my-tunnel-id

更新:

我假设标识符不能包含括号或引号。一种更安全但更长的替代方法是逐个剥离每个 outer 字符。

$ STI=$(curl ...)
$ STI=${STI#[}
$ STI=${STI#\"}
$ STI=${STI%]}
$ STI=${STI%\"}

在这一点上,我不妨展示如何使用 jq 来做到这一点:

$ curl ... | jq -r '.[0]'
my-tunnel-id

.表示传入JSON; [0] 提取第一个元素; -r 告诉 jq 输出原始字符串而不是引用的 JSON 字符串(my-tunnel-id 而不是 "my-tunnel-id")。