我試圖將環境變數映射到其他地方使用?
例如。
我有一個腳本來獲取一些在環境中預定義的變數,例如
$var1
$var2
aarray='{$var1, $var2}'
我需要使用此地圖在另一個腳本中作為變數添加。但是這個陣列并沒有選擇變數,有沒有正確的方法來做到這一點?
uj5u.com熱心網友回復:
首先,這不應該是一個與地形相關的問題。如果確實如此,那就是不完整的。您想做什么,為什么不使用foo.tf檔案來宣告您的所有意圖等。請重新表述問題并包含更多細節。
其次,除了 terraform,您想要實作的東西稱為關聯陣列。在環境中擁有它并不是一件容易的事。最好將每個變數都放在自己的環境變數中。看看這個 SO question一些更有經驗的人提出的想法。但是,如果您想在腳本中使用此陣列,則必須顯式宣告它(注意大括號、引號和缺少逗號):
declare -A TF_VAR_amap=(["buildver"]="$buildversion" ["workingdir"]="$workingdir" ["date"]="$date"
要訪問它們:
echo ${TF_VAR_amap["buildver"]}
第三,您使用的是單引號,而不是雙引號。單引號將保留每個字符的文字值,包括$. 使用雙引號。從 bash 手冊:
單引號
將字符括在單引號 (''') 中會保留引號內每個字符的字面值。單引號之間不能出現單引號,即使前面有反斜杠。
雙引號
用雙引號 ('"') 將字符括起來會保留引號內所有字符的字面值,但 '$'、'`'、'\' 和啟用歷史擴展時的 '!' 除外。 shell 處于 POSIX 模式(請參閱 Bash POSIX 模式),“!” 即使啟用歷史擴展,雙引號內也沒有特殊含義。字符 '$' 和 '`' 在雙引號內保留其特殊含義(請參閱 Shell Expansions)。反斜杠僅在后跟其中一個時保留其特殊含義以下字符:'$'、'`'、'"'、'\' 或換行符。在雙引號內,后跟這些字符之一的反斜杠將被洗掉。沒有特殊含義的字符前面的反斜杠保持不變。雙引號可以通過在雙引號前面加上反斜杠來參考。如果啟用,除非出現“!”,否則將執行歷史擴展 出現在雙引號中的是使用反斜杠進行轉義。'!' 前面的反斜杠 沒有被移除。
uj5u.com熱心網友回復:
我從未嘗試過,但看起來有一種方法可以做到這一點。請參閱Terraform 檔案中的復雜型別值部分。特別是這句話很有希望:
如果根模塊變數使用型別約束來要求復雜值(串列、集合、映射、物件或元組),Terraform 將嘗試使用變數定義檔案中使用的相同語法決議其值,這需要仔細注意shell 中的字串轉義規則:
因此,要采用您的特定值,我會嘗試類似(未測驗)的方法:
#!/bin/bash
date=...
workingdir=...
buildver=...
export TF_VAR_amap="{\"buildver\": \"$buildversion\", \"workingdir\": \"$workingdir\", \"date\": \"$date\"}'
terraform apply
正如您所看到的,語法在轉義方面很快變得一團糟。難怪他們.tfvars在檔案中宣傳這種方法。所以也許你會更成功地使用它 - 即.tfvars在 bash 中生成一個檔案。
另外作為旁注,在 bash 中使用"vs. 時要小心'。你寫的:
export TF_VAR_amap='{ buildver = $buildversion ...}'
不會像'在bash 中那樣按預期作業,阻止評估變數。另一個答案詳細解釋了這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351569.html
標籤:猛击
上一篇:Bash掃描器優化
