2011-02-25 507 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不擊(即使它是一個符號鏈接到它)。