1. 함수 외부에서 선언된 변수
year=2023 function sub(){ echo year=${year} in function; } sub
2. 함수 내부에서 재 초기화 된 변수
year=2023 function sub(){ echo year=${year} in function; year=4050;} sub echo year=${year} in outer
1. 스크립트 외부에서 생성된 변수
echo 'echo year=$year' > mydate.sh chmod +x mydate.sh ./mydate.sh echo year=$year in outer
2. 스크립트 내부에서 재 초기화 된 변수
- mydate.sh
#!/bin/bash echo year=$year year=9999
- 스크립트 외부에서 확인
./mydate.sh echo year=$year in outer
스크립트는 외부에서 생생된 일반변수에 접근할 수 없음
쉘 스크립트는 기본적으로 변수에 관한 한 SandBox 로 이해하면 됨
1. 서브쉘 바깥에서 선언된 변수가 서브쉘 내에서 접근 되는지 확인
year=2023 ( echo year=${year} in inline; year=4050; ) echo year=${year} in outer
서브쉘에서는 일반 변수를 상속 받아 사용이 가능함
하지만, 서브쉘 외부에는 영향을 미치지 못함
따라서 서브쉘은 기본적으로 변수를 복제하여 사용한다고 이해하면 됨
- 외부에서 선언된 변수가 인라인 그룹 내에서 접근-변경 될 수 있는지 확인
year=2023 { echo year=${year} in inline; year=4050; }; echo year=${year} in outer
외부에서 선언된 변수는 인라인 그룹 내에서 접근-변경 가능
인라인 그룹은 기본적으로 명령어를 묶어놓은 것 뿐이기 때문
export year=2020 ./mydate.sh echo year=$year in outer
mydate.sh
#!/bin/bash echo year=$year year=9999
쉘 스크립트는 export 된 변수도 영향을 미치지 못함
1. 파일 디스크립터란?
- 파일 디스크립터(FD: File Descrptor) 는 프로그램이 파일을 참조하는 방식
- 또는 파일(파이프, 장치, 소켓 또는 터미널)처럼 작동하는 다른 리소스를 참조하는 방법
- 데이터 소스에 대한 포인터와 비슷하거나, 혹은 기록 가능한 장소 같은 것
- FD에서 읽거나 쓸 때, FD의 리소스에서 데이터를 읽거나 쓰게 됨
2. 프로세스가 갖는 기본적인 파일 디스크립터
- 표준 입력(stdin): 파일 디스크립터 0
- 표준 출력(stdout): 파일 디스크립터 1
- 표준 오류(stderr): 파일 디스크립터 2
1. 리다이렉션이란?
- 표준 출력 내용을 파일로 저장
- 파일의 내용을 방향을 바꾸어 다른 파일로 전달
2. 표준 출력 전달(>, 1>)
echo "The seagull that flies the highest sees the farthest" > seagull.txt cat seagull.txt
또는 파일 디스크립터 1(stdout)을 붙여 다음과 같이 표현 가능
echo "The seagull that flies the highest sees the farthest" 1> seagull.txt cat seagull.txt
3. 표준 에러 전달(2>)
ls dir333 ls dir333 2> err.log cat err.log
4. 표준 입력 전달(0<)
while read v; do echo $v; done 0< file
5. 전달 내용 추가(>>)
ls dir4444 ls dir4444 2>> err.log cat err.log
'>'가 한개만 쓰일경우, 추가가 아닌 덮어쓰기로 작동
6. 두개의 내용 병합하기
echo ABCD > file1 echo 1234 > file2 cat file1 file2 > file cat file