我是bash脚本的新手。
我收到一些json响应,而我仅从响应中获得一个属性。我想将其保存到变量中,但无法正常工作
token=$result |sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1
echo $token
它返回空行。
我不能使用jq或任何第三方工具。
请让我知道我在想什么。
答案 0 :(得分:1)
您的命令应该是:
token=$(echo "$result" | sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1)
您需要使用echo
在标准输出上打印变量的内容,并且需要使用命令替换$( )
来将管道的输出分配给token
。
始终鼓励对变量进行报价,以避免出现空格和*
之类的全局字符问题。
顺便说一句,请注意,您可能可以使用以下方法获得输出:
token=$(jq -r .access_token <<<"$result")
我知道您已经说过您不能使用jq
,但这是一个独立的二进制文件(无需安装),并且以正确的方式对待JSON,而不是任意文本。
答案 1 :(得分:0)
尝试一下:
token="$(sed -E -n -e 's/^.*access_token": ?"//p' <<<"$result" | cut -d'"' -f1)"
token="$( script here )"
意味着$ token被设置为subshell -E
中的sed
允许Extended Regular Expressions。我们之所以这样想是因为JSON通常在:
之后和下一个"
之前包含一个空格。我们在空格后使用?
来告诉sed
,空格可能存在或可能不存在。<<<"$result"
是herestring,它以stdin代替文件将数据输入sed
中。