次のようにまだ設定されていない変数を使用して、スクリプトの上部にある文字列を初期化したいと思います。
str1='I went to ${PLACE} and saw ${EVENT}'
str2='If you do ${ACTION} you will ${RESULT}'
その後、後で、、、およびPLACE
設定されます。その後、拡張変数を使用して文字列を印刷できるようにしたいです。それは私の唯一の選択ですか?これはうまくいくようです:EVENT
ACTION
RESULT
eval
eval "echo ${str1}"
これは標準ですか?もっと良い方法がありますか?eval
変数が何でもよいことを考慮すると、実行しないことが最善です。
ベストアンサー1
表示される入力タイプの場合、シェル拡張を利用して値を文字列に置き換える唯一の方法はeval
。これは、値を制御し、str1
安全であることが知られている変数のみを参照し(機密データは含まず)、引用符がない他のシェル特殊文字を含まない限り安全です。文字列を二重引用符で囲むか、ここで拡張する必要があります"$\`
。\
str1
eval "substituted=\"$str1\""
文字列の代わりに関数を定義する方が強力です。
fill_template () {
sentence1="I went to ${PLACE} and saw ${EVENT}"
sentence2="If you do ${ACTION} you will ${RESULT}"
}
変数を設定し、関数を呼び出してfill_template
出力変数を設定します。
PLACE=Sydney; EVENT=fireworks
ACTION='not learn from history'; RESULT='have to relive history'
fill_template
echo "During my holidays, $sentence1."
echo "Cicero said: \"$sentence2\"."