Environment-Variables
從 JSON 文件展開環境變數
我有一個 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
將被刪除。如您所見,根據在此處輸入的命令,您可能會造成非常嚴重的損壞。