2011-02-25 30 views
0

これは初心者の質問ですが、苦労して謝ります。bash変数の再評価

私は、bourneシェルをinitスクリプトに使用しています。

私はどのように...変数 A = 1 B私は2,3,4などへの更新ループを持つスクリプトダウンどこか

= "世界の#$ Aへようこそ" を持っています私はBが再評価されるようになるのですか?現在、Bは全面的に "Welcome to world#1"のままです。

ありがとうございます!

UPDATE#1 - いくつかのコード:

#!/bin/sh 

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

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

repeatloop 

出力:私は#2を取得しようとしている

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

、#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はAが現在あるものの値が設定されています。更新したい場合は、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にテキストを割り当てることは関数を作成しません。 – Amber

0

あなたはBにあなたがAへの割り当てを行うたびに、割り当てを実行する必要があります。

#!/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することにより(それはそれへのシンボリックリンクだ場合でも)バッシュではありません。