favicon Jay Lee DevLog

728x90
300x250

오늘 기능 추가를 하다가,

소스 한줄만 추가했는데,

잘 동작하던 부분이 에러가 발생하고 동작자체가 정상적으로 되지 않아

엄청 애먹었다.

 

그러다 결국 원인을 찾게 되었는데,

예전에도 같은 증상으로 고생했었는데,

또 고생을 하는 바람에 빡쳐서 정리하기로 했다.

 


쉘 스크립트는 변수를 공유 한다.

 

이 부분을 잘 알고 있어야 한다.

이제부터 예시를 보여주겠다.

먼저 a.sh 스크립트의 내용이다.

 

그리고 b.sh의 내용이다.

 

일반적인 코딩, 예를 들면 c++이나 java 등으로 코딩을 하던 사람들은

위의 echo $TEST의 결과를 뭘로 예상할까?

 

나만 그런진 모르겠지만, 나는 그냥 "test1"로 예상하여 작업을 했었다.

그런데 웬걸, 정답은 "test2" 였다.

 

이말은 즉, include된 파일 내 함수에서 같은 변수명을 사용하면, 하나의 변수로 본다는 것이다..

 

나는 주소나 메모리를 넘겨준 것도 아니고, 그냥 call by value로 생각했었는데

그게 아니었던 것이다.....

실제 실행 결과다.

 

이게 왜 문제가 되냐면,

내가 처음부터 작업한 소스들은 변수명을 대부분 기억하기도 해서 상관이 없지만,

남이 만든 소스를 include 하여 사용하려고 할 때 혹시라도 변수명이 겹치게 되면 특정 함수를 호출했을 때

내가 예상한 값과 전혀 다른 값이 들어가 있게되고,

나는 당연히 해당 부분을 의심하지 않기 때문에 찾는데도 오래 걸린다는 것이다.

 

결론은..스크립트를 짤 때는, 변수명도 겹치지 않도록 생각을 잘하고 짜야한다는 것이다.

다들 나 같은 고생을 하지 않기를 바라며 글을 마친다.

728x90
반응형

+ Recent posts

/ /

Contact

📧 dlwjdwls60@naver.com


블로그에 내용이 있으면 해당 글을 보여주며, 없으면 내용이 복사된 채로 ChatGPT로 연결됩니다.