Environment-Variables

從 JSON 文件展開環境變數

  • March 2, 2021

我有一個 JSON 文件,其中包含以下內容(以及其他屬性):

{
 "environment": "$USER"
}

我正在使用jq這樣的方法提取該值:

ENVIRONMENT="$(jq -r '.environment' "properties.json")"

我希望 的值ENVIRONMENT是我的使用者名,而不是字元串$USER- 這可能嗎?

選項 1:僅按名稱讀取變數

bash允許擁有引用變數的變數,例如:

REF='USER'  # or get it from JSON
echo "${!REF}"
# prints current username

所以你可以這樣寫:

ENVIRONMENT_REF="$(jq -r '.environment' "properties.json")"
ENVIRONMENT="${!ENVIRONMENT_REF}"

JSON內容:

"environment": "USER"

選項 2:全殼擴展

其他選項,也許更好(但絕對不安全)正在使用eval

ENVIRONMENT="$(eval "echo $(jq -r '.environment' "properties.json")")"

請注意,這並不安全,並且可以將惡意程式碼插入到 JSON 文件中。什麼惡意程式碼?讓我們看看這個properties.json文件:

{
   "environment": "$(rm some_file)" 
}

外殼將使用eval此程式碼:

echo $(rm some_file)

…並且命名的文件some_file將被刪除。如您所見,根據在此處輸入的命令,您可能會造成非常嚴重的損壞。

引用自:https://unix.stackexchange.com/questions/636595