Linux

如何使用解釋的環境變數列印文件的內容

  • September 15, 2022

這個問題和這個問題類似: Is it possible to print the content of a variable of a variable with shell script? (間接引用)

在一個文件中

a=${env1}is a good ${env2}
b=${env3}is a good ${env2}

我想將此文件的內容顯示給:

a=tom is a good cat
b=jerry is a good mouse

我試過這個:

tmp=`cat a.conf`
echo $tmp # environmental variables are not interpreted, and file format changed, hard to read
echo ${!tmp} # no ...

此外,上述想法有點繞道。

如果你有一個看起來像這樣的文件:

a=${env1} is a good ${env2}
b=${env3} is a good ${env4}

如果您想生成替換變數的輸出,請使用該envsubst命令,該命令是gettext包的一部分。假設上面是 in example.txt.in,我們可以執行:

env1=tom env2=cat env3=jerry env4=mouse envsubst < example.txt.in

並作為輸出:

a=tom is a good cat
b=jerry is a good mouse

如果ensubst不可用,您可以執行以下操作:

#!/bin/sh

tmpfile=$(mktemp scriptXXXXXX)
trap 'rm -f $tmpfile' EXIT

cat > "$tmpfile" <<END_OUTSIDE
cat <<END_INSIDE
$(cat)
END_INSIDE
END_OUTSIDE

sh "$tmpfile"

將腳本命名為envsubst.sh,並與前面的範例類似地執行它:

env1=tom env2=cat env3=jerry env4=mouse sh envsubst.sh < example.txt.in

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