2

私はコメントで私の質問を説明しました:

VAR=
INS="Installing $VAR"

echo $INS   
.           # In each echo command I want to dynamically substitute
.           # the $VAR variable in the $INS variable. I want to do
echo $INS   # the substitution of the variable on echo command.

これは可能ですか?

4

5 に答える 5

5

あなたは仕事を優雅に行うための関数が必要です。

say() {
    echo "Installing $INS"
}

INS=hello
say

INS=world
say

またはこれだけ:

say() {
    echo "Installing $@"
}

say hello

say world
于 2012-06-12T13:25:22.027 に答える
3

例えば:

[ghoti@pc ~]$ cat varins
#!/bin/bash

msg='Installing "$VAR"'

for VAR in foo bar baz; do
  eval echo "$msg"
done

[ghoti@pc ~]$ ./varins
Installing foo
Installing bar
Installing baz
[ghoti@pc ~]$ 

これは、$VARが一重引用符で囲まれて展開されないという事実に依存しています。このevalコマンドは$msg変数を展開し、シェルがその変数$VARを置き換えます。

于 2012-06-12T13:37:04.313 に答える
1

パラメータ置換もそれを行うことができます:

ins='aaa $var aaa'
var='xxx'
echo "'${ins//\$var/$var}'"

結果:

'aaa xxx aaa'
于 2012-06-12T13:40:48.657 に答える
0
INS='Installing $VAR'
result=`eval "echo $INS"`
echo $result

INS の作成時に $VAR を置換しないように単一引用符を使用する必要があり
evalます 実行時に $INS を評価しechobackticks置換された文字列として返されます

于 2012-06-12T13:20:50.087 に答える
-2

ハチが言ったように、$VAR が時期尚早に評価されるのを防ぐには、一重引用符が必要です。Graham はコメントで、次のようなサブシェル呼び出しを避けることを提案しています。

#!/bin/bash
VAR=17
INS='Installing $VAR'
eval "echo \"$INS\""
VAR=42
eval "echo \"$INS\""

あなたがそれをしない場合:

VAR=23
INS="Installing $VAR"
echo $(eval "echo $INS")
VAR=8
echo $(eval "echo $INS")

23 はすぐにバインドされ、割り当て VAR=8 は通知されません。

結果:

Installing 17
Installing 42
Installing 23
Installing 23
于 2012-06-12T13:34:08.030 に答える