解釈された環境変数を使用してファイルの内容を印刷する方法

解釈された環境変数を使用してファイルの内容を印刷する方法

この質問は次の質問に似ています。 シェルスクリプトを使用して変数の内容を印刷できますか? (間接引用)

ファイルにあるもの

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 ...

また、上記のアイデアは少しバイパスです。

ベストアンサー1

次のファイルがある場合:

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

代替変数を使用して出力を生成するには、パッケージの一部であるこのenvsubstコマンドを使用できます。gettext上記が にあると仮定すると、以下を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

おすすめ記事