1. 사용 명령어 |
(1) ls
(2) local
2. 키워드 & 사용처 |
(1) 키워드
지역 변수, 전역 변수, 스코프
(2) 사용처
함수 내부에서 변수를 다룰 때 호출한 곳에 영향을 주지 않도록 지역 변수로 정의하고 싶을 때 사용합니다.
3. 실행 예제 |
$ ./local-var.sh
directory: /home/park/logdir
20210303.log 20210304.log
directory: /var/tmp
tmp.dat tmp.3113
4. 스크립트 |
#!/bin/sh
DIR=/var/tmp
ls_home()
{
# 변수 DIR을 함수 내부 변수로 정의
local DIR ①
DIR=~/$1 ②
echo "directory: $DIR"
ls $DIR
}
ls_home logdir ③
ls $DIR ④
5. 해설 |
이 스크립트는 홈 디렉터리 바로 아래에 logdir이라는 디렉터리 안에 있는 파일과 셸 변수 DIR로 지정한 /var/tmp 디렉터리 안에 있는 파일을 ls 명령어로 순서대로 표시하는 간단한 스크립트입니다.
시작할 때 ls_home이라는 함수를 만드는데 이 함수는 홈 디렉터리 아래에 있는 인수($1)로 받은 이름의 서브디렉터리를 표시합니다. ③에서 logdir이라는 인수를 넘기므로 ②의 $1값은 logdir이 됩니다.
또한 ②에서는 ~(틸다) 기호를 사용하여 홈 디렉터리 경로를 얻습니다. 셸 스크립트에서 ~는 홈 디렉터리 경로가 됩니다. 즉, 스크립트를 실행한 사용자명이 user1이라면 ~/home/park/가 됩니다. 따라서 ②는 실행 시 "DIR=/home/park/logdir" 같이 됩니다.
많은 프로그래밍 언어가 함수에서 정의한 변수를 그 함수 안에서만 유효한 지역 변수로 삼습니다. 하지만 셸 스크립트는 기본적으로 변수 모두를 전역 변수로 취급합니다. 따라서 함수 안에서 변수값을 변경하면 스크립트 전체에 영향을 미칩니다.
즉 ②의 셸 변수 대입문은 이 스크립트 서두에 선언한 DIR=/var/tmp에 영향을 줍니다. 이를 피하기 위해 ①에서 local 명령어를 써서 변수를 선언합니다. 호출한 시점에 이미 DIR이라는 셸 변수가 사용되었지만 ls_home 함수 안에 있는 같은 이름의 셸 변수 DIR은 지역 변수이므로 호출한 곳에 영향을 주지 않습니다.
만약 함수안에서 local 명령어를 쓰지 않았다면 변수값은 변경되어 ④에서 /var/tmp가 아닌 ~/logdir이 출력됩니다.
$ ./local.sh
directory : /home/park/logdir
20210304.log 20210305.log
directory : /home/park/logdir
20210304.log 20210305.log
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 변환처리 - 014 값이 정수인지 확인해서 계산하기 (4) | 2021.03.05 |
---|---|
[Linux 셸 스크립트] 변환처리 - 013 HTML 파일에서 특정 속성값 얻기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 011 실행 시 변수값이 비어 있을 때 기본값을 정의해서 설정하기 (0) | 2021.03.04 |
[Linux 셸 스크립트] 사용자 인터페이스 - 010 파일 압축 시 실행 상태를 표시하는 진행바 표시하기 (0) | 2021.03.04 |
[Linux 셸 스크립트] 사용자 인터페이스 - 009 달력을 이용해 특정 날짜의 로그 파일 삭제하기 (0) | 2021.03.03 |
댓글