쉘스크립트

bash 전역(global) 변수

고요한하늘... 2014. 7. 17. 15:35

 bash환경에서 

스크립트를 개발하다 보니 아래와 같은 경우를 만나게 될수 있다.


* bash 환경에서 함수 내에 변수를 선언하면 자동으로 global로 설정된다. 지역변수를 설정하기 위해서는 local이라는 키워드를 앞에 넣어야 한다.


abc라는 변수에 1이라는 값을 세팅하고

test()라는 함수를 호출

test()함수에서는 input.txt 파일에서 읽어온 값을 abc 값에 assign하고

최종적으로 abc를 출력하면

생각했던 값이 나오지 않고 1이 출력된다.


#################################################################################################

#!/bin/bash


abc=1

function test()

{

        cat input.txt | while read line; do

                   abc=$line;

        done

}

echo $abc;

test

echo $abc;

#################################################################################################


원인 : 코드 중간에 | (pipe line)이 존재함으로써 해서 while문은 subprocess로 실행이 된다.

엄밀하게 말해서 while문안의 abc를 global로 선언한 변수와 다른 변수이다.


해결방법 : | (pipe line)을 < 파일명 의 형식으로 데이터를 stdin으로 직접 밀어 넣는 식으로 해결이 가능하다.

#################################################################################################

#!/bin/bash


abc=1

function test()

{

        while read line; do

                abc=$line;

                break;

        done < input.txt

}

echo $abc;

test

echo $abc;

#################################################################################################


'쉘스크립트' 카테고리의 다른 글

vim 역참조( backreference)  (0) 2015.05.20
미리알았다면 좋았을 것들  (0) 2014.04.15
awk gsub  (0) 2012.02.29
parallel 병렬처리 명령어  (0) 2011.10.20
bash 사용 예  (0) 2011.07.19