2011-02-25 12 views
0

이것은 초보자가 많이 묻는 질문이지만 사과를하기 위해 고심하고 있습니다.bash 변수 재평가

저는 init 스크립트에 bourne shell을 사용하고 있습니다.

나는이 변수 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가 실제로 변수가 없기 때문에

B="Welcome to the world #1" 

그래서 "다시 평가는"말도 안돼 할당
전 그 안에.

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에 텍스트를 할당 B는 기능을하지 않습니다. – Amber

0

당신은 AB에 당신이 할당을 할 때마다 할당을 수행해야합니다 방법 #!/bin/sh으로

#!/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 

배쉬 아니다 (그것에 심볼릭 링크의 경우에도).