Shell-Script

用它們的實際值替換文件中的環境變數?

  • April 4, 2022

有沒有一種簡單的方法來替換/評估文件中的環境變數?就像假設我有一個文件config.xml,其中包含:

<property>
   <name>instanceId</name>
   <value>$INSTANCE_ID</value>
</property>
<property>
   <name>rootPath</name>
   <value>/services/$SERVICE_NAME</value>
</property>

…ETC。我想用環境變數$INSTANCE_ID的值替換文件中的INSTANCE_ID環境變數$SERVICE_NAME的值SERVICE_NAME。我不會先驗地知道需要哪些環境變數(或者更確切地說,如果有人向配置文件添加新的環境變數,我不想更新腳本)。謝謝!

您可以使用envsubst(部分gnu gettext):

envsubst < infile

會將文件中的環境變數替換為相應的值。變數名稱必須僅由字母數字或下劃線 ASCII 字元組成,不能以數字開頭且非空;否則這樣的變數引用將被忽略。


要僅替換某些環境變數,請參閱此問題。

這不是很好,但它有效

( echo "cat <<EOF" ; cat config.xml ; echo EOF ) | sh

如果它在一個 shell 腳本中,它看起來像:

#! /bin/sh
cat <<EOF
<property>
   <name>instanceId</name>
   <value>$INSTANCE_ID</value>
</property>
EOF

編輯,第二個提案:

eval "echo \"$(cat config.xml)\""

編輯,與問題不嚴格相關,但在從文件讀取變數的情況下:

(. .env && eval "echo \"$(cat config.xml)\"")

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