この質問は次の質問に似ています。 シェルスクリプトを使用して変数の内容を印刷できますか? (間接引用)
ファイルにあるもの
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