Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Bash는 명령을 읽어 이름과 인수를 해석하고, 필요한 확장·리디렉션을 적용한 뒤 실행합니다. ;는 앞 명령의 성공 여부와 관계없이 다음 명령을, &&는 성공했을 때만, ||는 실패했을 때만 다음 명령을 실행합니다. 별칭은 읽는 시점에 명령어를 바꾸고, 환경 변수는 자식 프로세스에 전달되는 설정입니다. 이 차이를 알면 같은 글자를 입력해도 결과가 달라지는 이유를 설명할 수 있습니다.

명령 이름은 어떻게 결정될까요?

이 강좌의 예시는 Bash를 기준으로 합니다. 셸은 명령줄을 읽고 인수·변수·리디렉션을 처리한 뒤 명령 이름을 해석합니다. 이름이 별칭, 함수, 셸 내장 명령인지, 아니면 PATH에서 찾은 실행 파일인지에 따라 실제 동작이 달라질 수 있습니다. 현재 셸의 해석을 확인하려면 다음을 실행하세요.

type -a printf
type -a ls
command -v ls

type -a의 출력은 별칭·함수·내장 명령·실행 파일 후보를 보여 줄 수 있습니다. command -v는 명령 이름을 찾을 수 있는지 확인할 때 쓸 수 있습니다. PATH는 외부 실행 파일을 찾는 디렉터리 목록이며, 별칭이나 함수까지 파일 경로 하나로 설명하지는 못합니다. 시스템의 PATH를 실습을 위해 임의로 덮어쓰지 마세요.

종료 상태로 다음 명령 실행하기

셸 명령은 종료 상태를 남깁니다. 관례적으로 0은 성공, 0이 아닌 값은 실패나 특정 결과를 뜻합니다. 예를 들어 grep은 찾는 줄이 없을 때 1을 반환할 수 있습니다. $?는 가장 최근에 실행된 명령의 상태이므로 확인하려면 바로 사용해야 합니다.

false
echo $?

Bash의 false는 실패 상태를 반환하므로 출력은 1입니다. 다음 표는 명령을 연결하는 연산자의 기본 의미입니다.

표기 오른쪽 명령의 실행 조건 용도
; 왼쪽 결과와 관계없이 실행 명령을 순서대로 나열
&& 왼쪽 종료 상태가 0일 때 앞 단계가 성공해야 진행
|| 왼쪽 종료 상태가 0이 아닐 때 실패 시 대안 실행
false && printf 'not run\n'
false || printf 'fallback\n'
true; printf 'always\n'

위 세 줄을 순서대로 실행하면 not run은 출력되지 않고 fallback과 always만 보입니다. &&와 ||는 Bash에서 우선순위가 같고 왼쪽부터 결합합니다. 따라서 작업 && 성공처리 || 실패처리는 ‘성공처리’ 자체가 실패하면 실패처리까지 실행될 수 있습니다. 두 갈래의 뜻을 정확히 표현해야 한다면 if ...; then ...; else ...; fi가 더 명확합니다.

별칭은 셸이 읽을 때 확장됩니다

alias는 대화형 Bash에서 자주 쓰는 명령의 짧은 이름을 만듭니다. 다음 줄을 입력한 뒤 새 프롬프트에서 ll 또는 type ll을 실행해 보세요. Bash는 명령줄을 실행하기 전에 읽고 해석하므로, 별칭 정의와 사용을 한 줄의 복합 명령으로 묶으면 기대대로 확장되지 않을 수 있습니다.

alias ll='ls -l'
type ll
ll

별칭은 기본적으로 현재 셸에만 적용되고, 비대화형 Bash에서는 별도 설정 없이 확장되지 않습니다. 실제 자동화 스크립트가 별칭에 의존한다고 가정하지 마세요. 실습을 마치면 unalias ll로 지울 수 있습니다. 인수를 받아 재사용해야 하는 동작은 별칭보다 셸 함수를 검토하는 편이 낫습니다.

셸 변수와 환경 변수 구별하기

셸 변수는 현재 셸에서 사용할 수 있고, export한 변수는 이후 실행하는 자식 프로세스의 환경에도 들어갑니다. 아래 예제는 흔한 시스템 변수 대신 실습 전용 이름을 사용합니다.

LESSON_MODE=practice
printf '%s\n' "$LESSON_MODE"
export LESSON_MODE
printenv LESSON_MODE

두 출력 모두 practice입니다. 첫 출력은 현재 셸의 변수 확장 결과이고, 둘째 출력은 외부 printenv 프로세스가 전달받은 환경을 읽은 결과입니다. export는 이미 실행 중인 다른 셸이나 부모 프로세스를 거꾸로 바꾸지 않습니다.

한 명령에만 값을 전달하려면 이름=값 명령 형식을 사용할 수 있습니다. 실습 변수를 정리할 때는 현재 셸에서 unset LESSON_MODE를 실행하세요. 사용자 홈 디렉터리나 시스템 PATH 같은 중요한 변수는 실습용 이름으로 재사용하지 마세요.

실행 순서를 점검하는 방법

  • 명령이 무엇으로 해석되는지 모르면 type -a 이름부터 확인합니다.
  • 조건부 실행이 예상과 다르면 각 단계의 종료 상태를 분리해 확인합니다.
  • 별칭이 동작하지 않으면 대화형 셸인지, 정의 후 새 명령줄에서 실행했는지 확인합니다.
  • 자식 명령이 변수를 못 읽으면 export 여부를 확인합니다.

세미콜론과 조건 연산자, 별칭과 변수는 모두 ‘명령 실행 방식’에 관여하지만 같은 기능은 아닙니다. 실제 파일을 바꾸는 명령을 연결하기 전에는 먼저 true, false, printf처럼 부작용이 작은 명령으로 흐름을 확인하세요.

공식 문서

GNU Bash 명령 목록 문서는 ;·&&·||의 결합 규칙을, Bash 별칭 문서는 확장 시점을 설명합니다. 변수와 환경은 Bash Reference Manual에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

실습 폴더에서 파일과 디렉터리를 만들고 복사·이동·삭제해 봅니다. 덮어쓰기와 삭제 전에 경로와 결과를 확인하는 습관도 익힙니다.

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux fmt 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux wc 명령어로 줄·단어·바이트·문자 수를 확인하는 방법을 설명합니다. 개행 기준의 줄 수, -c와 -m 차이, 여러 파일 합계와 안전한 파이프 활용 예제를 정리합니다.

Linux / 명령어 / cp - 파일과 디렉터리 복사

Linux / 명령어 / cp - 파일과 디렉터리 복사

Linux cp 명령어로 파일과 디렉터리를 복사하는 방법을 설명합니다. 덮어쓰기 제어, 속성 보존, 심볼릭 링크, 희소 파일과 안전한 복사 옵션을 함께 정리합니다.

Linux / 네트워크 / IP 확인하는 방법

Linux / 네트워크 / IP 확인하는 방법

Linux에서 ip address와 ip route get으로 인터페이스 주소와 실제 출발지 IP를 확인하는 방법을 설명합니다. 사설·공인 IP, IPv4·IPv6와 컨테이너 환경의 차이도 정리합니다.

Linux / 명령어 / mkdir - 디렉터리 생성

Linux / 명령어 / mkdir - 디렉터리 생성

Linux mkdir 명령어로 디렉터리와 여러 단계의 상위 디렉터리를 만드는 방법을 설명합니다. 권한, umask, SELinux 환경과 자동화에서 안전하게 사용하는 방법도 정리합니다.

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

Linux getent 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / locate - 파일 이름 색인에서 빠르게 경로 검색

Linux / 명령어 / locate - 파일 이름 색인에서 빠르게 경로 검색

Linux locate 명령어로 파일 이름 색인을 빠르게 검색하는 방법을 설명합니다. updatedb, 최신성 한계, 패턴과 정규 표현식, find와의 차이를 정리합니다.

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux / 명령어 / ssh-keygen - SSH 키 쌍 생성과 지문 확인

Linux ssh-keygen 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

리눅스 파일과 디렉터리의 읽기·쓰기·실행 권한을 해석하고 chmod로 실습 파일의 권한을 바꿉니다. sudo의 사용 범위와 권한 오류를 진단하는 순서도 설명합니다.