쉘(Shell)에서 `&`, `&&`, `;` 의 차이
쉘(Shell)에서 `&`, `&&`, `;` 의 차이
쉘(Shell)에서 &, &&, ; 의 차이
리눅스/유닉스 쉘에서 명령어를 연결할 때 자주 사용하는 연산자가 있습니다. 대표적으로 &, &&, ; 인데, 각각 의미와 실행 방식이 다릅니다. 헷갈리기 쉬운 부분을 정리해보겠습니다.
1. & : 백그라운드 실행
명령어 끝에 &를 붙이면 해당 명령이 백그라운드 프로세스로 실행됩니다. 즉, 쉘은 해당 명령이 끝날 때까지 기다리지 않고 바로 다음 명령을 받을 수 있습니다.
1
2
3
$ long_running_command &
[1] 12345 # 작업 번호와 PID 출력
$ echo "프롬프트가 바로 반환됨"
👉 결과적으로 a & b 라고 쓰면:
a는 백그라운드 실행- 그와 동시에
b가 포어그라운드에서 실행됨 → 겹쳐 돌아가기 때문에 “동시 실행”처럼 동작
2. && : 조건부 실행 (앞이 성공해야 뒤 실행)
&&는 앞 명령이 성공(종료 코드 0)했을 때만 뒤 명령을 실행합니다. 실패하면 뒤 명령은 실행되지 않습니다.
1
$ mkdir mydir && cd mydir
mkdir mydir성공 →cd mydir실행mkdir mydir실패 →cd mydir실행되지 않음
1
2
3
4
5
$ true && echo "성공했으니 실행"
성공했으니 실행
$ false && echo "성공했으니 실행"
# 출력 없음
3. ; : 순차 실행 (성공/실패와 무관)
;는 단순히 명령어를 순서대로 실행하는 의미입니다. 앞 명령어가 실패해도 뒤 명령은 무조건 실행됩니다.
1
2
$ false ; echo "실행됨"
실행됨 # 앞 명령 실패했어도 실행
1
2
$ mkdir mydir ; cd mydir
# mydir 생성 실패해도 cd 실행 → 에러 발생 가능
4. 비교 정리
| 구문 | 실행 조건 | 실행 방식 |
|---|---|---|
a & | a를 백그라운드 실행 | 동시에 다른 명령 실행 가능 |
a ; b | a 실행 후 무조건 b 실행 | 순차 실행 |
a && b | a가 성공했을 때만 b 실행 | 조건부 실행 |
5. 추가 Tip: || (앞이 실패했을 때 실행)
|| 는 &&와 반대로, 앞 명령이 실패했을 때만 뒤 명령을 실행합니다.
1
2
3
4
5
$ false || echo "앞이 실패했으니 실행"
앞이 실패했으니 실행
$ true || echo "앞이 실패했으니 실행"
# 출력 없음
명령의 그룹핑
mkdir test 성공했을 경우 {}안의 명령어 그룹을 실행, 실패했을 경우 || 뒤의 명령어를 실행
1
mkdir test && { cd test; touch abc; echo 'success!!' } || echo 'fail to make dir';
✅ 요약
- 동시에 실행하고 싶으면
& - 성공했을 때만 다음 실행은
&& - 그냥 순차 실행은
; - 실패했을 때만 실행하고 싶으면
||
This post is licensed under CC BY 4.0 by the author.