2011-02-25 55 views
0

这是一个总的新手问题,但我很挣扎,所以我很抱歉。bash变量重新评估

我正在使用bourne shell作为init脚本。

我有一个变量 A = 1 B = “欢迎来到世界#$ A”

某处脚本我有一个循环,更新了2,3,4等..怎么办我得到B重新评估?目前,B一直在“欢迎来到世界第一”。

谢谢!

更新#1 - 一些代码:

#!/bin/sh 

A=1 
B="Welcome to #$A" 

repeatloop() { 
    for i in {1..5} 
    do 
    A=$i 
    echo $B 
    done 
} 

repeatloop 

输出:

Welcome to #1 
Welcome to #1 
Welcome to #1 
Welcome to #1 
Welcome to #1 

我试图得到#2,#3,#4 ....

回答

1

当你输入...

B="Welcome to the world #$A" 

$ A的值被展开值分配给B.这意味着你输入的内容有相当于...

B="Welcome to the world #1" 

因此,“重新评估”是没有意义的,因为B没有实际上有一个变量在里面。

如果你想变量不会被展开,直至有实际参考,使用的函数:

function B() { 
    echo "Welcome to the world $1" 
} 

A=1 
welcomeone=$(B $A) 

A=2 
welcometwo=$(B $A) 
0

的问题是,B设置有一个什么样的是目前值。如果你想更新它,你可以从一个函数中获得它,它重新创建B的值,并且新的值为A.

用c/java这样的另一种语言思考它。

int a = 0; 
string b = "blah blah blah" + a; // b= "blah blah blah0" 
a = 4; 
//b still equals "blah blah blah0" 
+0

B不是一个函数,它不是'执行'的。 – Amber

+0

你的例子没有这个,它只是一些文本分配给B,像变量 – f0ster

+0

...并且将文本分配给B不会使B成为函数。 – Amber

0

您将需要每次做作业的时间分配做BA

#!/bin/sh 

A=1 
B="Welcome to #$A" 

repeatloop() { 
    for i in {1..5} 
    do 
    A=$i 
    B="Welcome to #$A" 
    echo $B 
    done 
} 

repeatloop 

顺便说#!/bin/sh不击(即使它是一个符号链接到它)。