我需要迭代一個變數并生成多個引數,以便稍后在 bash 腳本中傳遞給命令。
例子:
VAR_FILES="a.json;b.json"
IFS=';'
read -ra ADDR <<< "$VAR_FILES"
CMD_ARGS=""
for i in "${ADDR[@]}"; do
CMD_ARGS="$CMD_ARGS-var-file=$i "
done
terraform plan -input=false $CMD_ARGS -out=test.plan
我希望上述內容與 terraform 命令一起使用,但是該命令將變數作為單個引數讀取,如下面的錯誤訊息中所反映。
user@local:~/test/$ terraform plan -input=false $CMD_ARGS -out=test.plan
?
│ Error: Failed to read variables file
│
│ Given variables file "a.json" -var-file="b.json" does not exist.
?
它成功讀取了前導-var-file=檔案名和第一個檔案名,但隨后將變數的其余部分作為第一個-var-file引數的一部分讀取。
uj5u.com熱心網友回復:
IFS=';'更改腳本其余部分的欄位間分隔符,這會弄亂分詞。如果您將它添加到read呼叫中,那么它只會對該命令有效。
您還可以使用陣列來正確存盤多個單詞并完全避免單詞拆分。
var_files="a.json;b.json"
IFS=';' read -ra addrs <<< "$var_files"
cmd_args=()
for addr in "${addrs[@]}"; do
cmd_args =(-var-file="$addr")
done
terraform plan -input=false "${cmd_args[@]}" -out=test.plan
我還將所有變數名稱轉換為小寫。所有大寫名稱都為 shell 保留。最好對您自己的變數使用小寫字母,以免與內置變數發生沖突。
uj5u.com熱心網友回復:
您正在更改IFS,而不是將其設定回原始值:
VAR_FILES="a.json;b.json"
OLD_IFS=${IFS}
IFS=';'
read -ra ADDR <<< "$VAR_FILES"
CMD_ARGS=""
for i in "${ADDR[@]}"; do
CMD_ARGS="$CMD_ARGS-var-file=$i "
done
IFS=${OLD_IFS}
terraform plan -input=false ${CMD_ARGS} -out=test.plan
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335731.html
上一篇:MVC中的正確結構與spring
下一篇:在shell腳本中呼叫鏈碼函式
