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 / 명령어 / join - 공통 필드로 두 파일 결합

Linux / 명령어 / join - 공통 필드로 두 파일 결합

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

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Bash type 명령어로 별칭, 예약어, 함수, 내장 명령과 실행 파일을 구분하는 방법을 설명합니다. 모든 후보와 경로 확인, command -v·which와의 차이 및 스크립트 활용법을 다룹니다.

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux apt-get 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / ps - 현재 프로세스 상태 확인

Linux / 명령어 / ps - 현재 프로세스 상태 확인

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

Linux / 명령어 / modinfo - 커널 모듈의 설명과 매개변수 확인

Linux / 명령어 / modinfo - 커널 모듈의 설명과 매개변수 확인

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

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

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

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

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

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

Linux / 명령어 / awk - 필드별 텍스트 분석과 계산

Linux / 명령어 / awk - 필드별 텍스트 분석과 계산

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

Linux / 명령어 / su - 사용자 계정 전환

Linux / 명령어 / su - 사용자 계정 전환

Linux su 명령어로 다른 사용자 권한의 셸과 단일 명령을 실행하는 방법을 설명합니다. su와 su --login 차이, 환경 변수, PAM 인증, sudo·runuser 선택 기준과 보안 주의사항을 정리합니다.

Linux 강좌 / 배포판 선택하기

Linux 강좌 / 배포판 선택하기

리눅스 입문과 서버 실습에 Ubuntu와 Rocky Linux 중 무엇을 선택하면 좋을까요? 학습 목표, 패키지 관리 방식과 지원 정책을 기준으로 두 배포판을 비교합니다.