GNU/Linux >> Linux の 問題 >  >> Linux

変数の拡張を延期する方法は?

スクリプトの先頭にあるいくつかの文字列を、次のようなまだ設定されていない変数で初期化したかったのです。

str1='I went to ${PLACE} and saw ${EVENT}'
str2='If you do ${ACTION} you will ${RESULT}'

その後、PLACEEVENTACTION 、および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"."

Linux
  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. Zshで変数データ型を取得する方法は?

  3. Linuxで$Path変数を設定する方法

  1. 間接変数評価を行う方法は?

  2. Bashブレースの拡張と変数?

  3. 特定の変数を調達する方法

  1. Linux エクスポート コマンドの例 (環境変数の設定方法)

  2. コマンドをシェルスクリプトの変数に格納する方法は?

  3. Cでアトミック変数を使用するには?