Variable-Substitution

從/到文件的變數替換

  • August 3, 2019

如何用另一個文件中的變數替換文件中的佔位符?(就像 docker-compose 正在做的那樣。)

我發現很多關於單變數替換或環境變數替換的文章,但不是文件到文件。

.env 文件

name=John
time='10:00'

內容文件

Hello "${name}"! I wait for u since ${time}.

輸出文件:

Hello "John"! I wait for u since 10:00.

編輯:請注意,我也想保留"在文件中。

Edit2:我最終使用了@steeldriver 的解決方案。這是我現在在我的腳本中使用的:

# Make copy of the template folder (containing scripts and `.env` file)
cp -r templates .templates

# Replace environment variables in all files of the folder
set -a
for file in $(find .templates -type f)
do
   . ./.env && envsubst < $file > $file.tmp && mv $file.tmp $file
done
set +a

# create output directory
mkdir -p $HOME/output/

# copy if new or modified
rsync -raz .templates/. $HOME/output/

# remove temp folder
rm -r .templates

使用envsubst

set -a
. ./.env && envsubst < content
set +a

set -a/set +a打開/關閉創建/修改變數的自動導出。

在用它們的實際值替換文件中的環境變數中找到了一個可行的解決方案?

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

編輯:此解決方案還刪除"了文件中的標記。那不是我想要的。

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