forループの変数を参照するグローバル変数が正しく設定されていません。

forループの変数を参照するグローバル変数が正しく設定されていません。

ここに私のサンプル片があります。

text="Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
for (( i=0 ; i<1 ; i++ ))
do
 one="one"
 two="two"
 three="three"
 echo "${text}"
done

返品

Var 1 is , Var 2 is , Var 3 is

コードを次のように変更すると、期待どおりに機能します。

text="Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
for (( i=0 ; i<1 ; i++ ))
do
 one="one"
 two="two"
 three="three"
 echo "Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
done

答え1

これは、「text」変数が設定されている場合、他のすべての変数が空であり、デフォルトは空の文字列「」であるために発生します。

textコマンドを発行するときに設定し、( ")の代わりに( ")として保存して、bashが式を評価しないようにします。

$ text='echo "var1 = $one var2 = $two"' 
$ one=hi
$ two=bye

それからeval $text戻ってくるでしょうvar1 = hi var2 = bye

関連情報