오늘 기능 추가를 하다가,
소스 한줄만 추가했는데,
잘 동작하던 부분이 에러가 발생하고 동작자체가 정상적으로 되지 않아
엄청 애먹었다.
그러다 결국 원인을 찾게 되었는데,
예전에도 같은 증상으로 고생했었는데,
또 고생을 하는 바람에 빡쳐서 정리하기로 했다.
쉘 스크립트는 변수를 공유 한다.
이 부분을 잘 알고 있어야 한다.
이제부터 예시를 보여주겠다.
먼저 a.sh 스크립트의 내용이다.
그리고 b.sh의 내용이다.
일반적인 코딩, 예를 들면 c++이나 java 등으로 코딩을 하던 사람들은
위의 echo $TEST의 결과를 뭘로 예상할까?
나만 그런진 모르겠지만, 나는 그냥 "test1"로 예상하여 작업을 했었다.
그런데 웬걸, 정답은 "test2" 였다.
이말은 즉, include된 파일 내 함수에서 같은 변수명을 사용하면, 하나의 변수로 본다는 것이다..
나는 주소나 메모리를 넘겨준 것도 아니고, 그냥 call by value로 생각했었는데
그게 아니었던 것이다.....
실제 실행 결과다.
이게 왜 문제가 되냐면,
내가 처음부터 작업한 소스들은 변수명을 대부분 기억하기도 해서 상관이 없지만,
남이 만든 소스를 include 하여 사용하려고 할 때 혹시라도 변수명이 겹치게 되면 특정 함수를 호출했을 때
내가 예상한 값과 전혀 다른 값이 들어가 있게되고,
나는 당연히 해당 부분을 의심하지 않기 때문에 찾는데도 오래 걸린다는 것이다.
결론은..스크립트를 짤 때는, 변수명도 겹치지 않도록 생각을 잘하고 짜야한다는 것이다.
다들 나 같은 고생을 하지 않기를 바라며 글을 마친다.
'Linux > Shell Script' 카테고리의 다른 글
[Script] 변수명에 변수가 들어가는 경우 값 가져오는 방법. (0) | 2024.06.05 |
---|---|
쉘스크립트 if 문 당황할 만한 상황들 (0) | 2023.12.22 |
쉘 스크립트 이것 저것.. (1) | 2023.12.19 |
자주 쓰는 커맨드를 바꿔보자 : alias (0) | 2023.09.11 |