スクリプトの先頭にあるいくつかの文字列を、次のようなまだ設定されていない変数で初期化したかったのです。
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
を実行しないと便利です 変数を考慮すると何でもかまいません。
承認された回答:
表示する種類の入力では、シェル拡張を利用して値を文字列に置き換える唯一の方法は、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"."