簡體   English   中英

無法將sed輸出存儲到變量

[英]not able to store sed output to variable

我是bash腳本的新手。 我收到一些json響應,而我僅從響應中獲得一個屬性。 我想將其保存到變量中,但是它不起作用token=$result |sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1 echo $token token=$result |sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1 echo $token它返回空行。我無法使用jq或任何第三方工具。請讓我知道我所缺少的內容。

您的命令應為:

token=$(echo "$result" | sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1)

您需要使用echo在標准輸出上打印變量的內容,並且需要使用命令替換$( )將管道的輸出分配給token

始終鼓勵對變量進行報價,以避免出現空格和*等全局字符問題。


順便說一句,請注意,您可能可以使用以下方法獲得輸出:

token=$(jq -r .access_token <<<"$result")

我知道您已經說過您不能使用jq但是它是一個獨立的二進制文件(無需安裝),並且以正確的方式對待JSON,而不是任意文本。

試試看:

token="$(sed -E -n -e 's/^.*access_token": ?"//p' <<<"$result" | cut -d'"' -f1)"

說明:

  • token="$( script here )"意味着$ token設置為通過稱為命令行替換的過程在subshel​​l內運行的腳本的輸出/結果
  • sed -E允許擴展正則表達式 我們之所以這樣想是因為JSON通常在:和下一個"之前包含一個空格。我們在該空格之后使用?來告訴sed該空格可能存在或可能不存在。
  • <<<"$result"是一個herestring ,它將數據以stdin的形式饋入sed而不是文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM