导出添加额外字符

时间:2016-06-22 20:54:59

标签: bash awk export saucelabs

我正试图从酱油实验室获取我的隧道ID ...为了得到这个,我正在做以下事情:

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

这会返回["my-tunnel-id"]

所以我想摆脱[]并导出我的隧道ID ..

以下是[]

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

当我执行export -p时,我会看到"\"my-tunnel-id\""

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

1 个答案:

答案 0 :(得分:3)

服务器返回一个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

更新

我认为标识符不能包含括号或引号。更安全但更长的替代方法是逐个删除每个外部字符。

$ 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")。