본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
셸 변수와 셸 옵션을 보여 주거나 바꾸는 bash 내장 명령
  • 경로 : bash 내장 명령 (type set 으로 확인)

인자 없이 set 만 실행하면 현재 셸에 선언된 모든 변수(셸 변수와 환경 변수)와 함수를 이름 순으로 출력한다. 선언된 셸 변수를 확인할 때 쓰는 명령이 바로 이것이다. 옵션을 주면 셸의 동작 방식을 켜고 끄고, 인자를 주면 위치 매개변수($1, $2 …)를 다시 정한다.

$ set                    # 모든 셸 변수·함수 출력
$ set -o                 # 셸 옵션의 켜짐/꺼짐 목록
$ set -o 옵션이름        # 옵션 켜기 (set +o 옵션이름 은 끄기)
$ set -- 값1 값2 ...     # 위치 매개변수를 다시 정한다

자주 쓰는 옵션

편집 원본 편집
짧은 옵션 -o 이름 뜻
-e errexit 명령이 실패(0 이 아닌 종료 코드)하면 스크립트를 바로 끝낸다
-u nounset 선언하지 않은 변수를 쓰면 오류로 본다
-x xtrace 실행하는 명령을 앞에 + 를 붙여 출력한다(디버깅)
-C noclobber 리다이렉션 > 가 기존 파일을 덮어쓰지 못하게 한다 → 리눅스 리다이렉션
vi / emacs 명령행 편집 방식을 vi 식 / emacs 식으로 바꾼다
ignoreeof Ctrl+D 로 셸이 끝나지 않게 한다
  • - 는 켜기, + 는 끄기다. set -x 로 켜고 set +x 로 끈다

변수를 보는 명령 비교

편집 원본 편집
명령 보여 주는 것
set 셸 변수와 환경 변수, 함수까지 전부
env, printenv 환경 변수(export 된 변수)만. 셸 변수는 나오지 않는다
declare, typeset set 처럼 변수를 보여 주되 속성(-x 환경 변수, -r 읽기 전용 등)까지 표시
echo $변수 변수 하나의 값
  • unset 은 변수를 지우는 명령이고, chsh 는 로그인 셸을 바꾸는 명령이다. 둘 다 변수를 확인하는 명령이 아니다
  • 셸 변수와 환경 변수의 차이는 리눅스 환경 변수 문서를 본다
$ NAME=itwiki            # 셸 변수 선언
$ set | grep ^NAME=      # set 에는 나온다
NAME=itwiki
$ env | grep ^NAME=      # env 에는 나오지 않는다
$ export NAME            # 환경 변수로 바꾸면
$ env | grep ^NAME=      # env 에도 나온다
NAME=itwiki

$ set -- a b c           # 위치 매개변수 다시 정하기
$ echo $2
b