나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-03-11 14:37:57

Bash


파일:다른 뜻 아이콘.svg  
#!if 넘어옴1 != null
''''''{{{#!if 넘어옴2 != null
, ''''''}}}{{{#!if 넘어옴3 != null
, ''''''}}}{{{#!if 넘어옴4 != null
, ''''''}}}{{{#!if 넘어옴5 != null
, ''''''}}}{{{#!if 넘어옴6 != null
, ''''''}}}{{{#!if 넘어옴7 != null
, ''''''}}}{{{#!if 넘어옴8 != null
, ''''''}}}{{{#!if 넘어옴9 != null
, ''''''}}}{{{#!if 넘어옴10 != null
, ''''''}}}은(는) 여기로 연결됩니다. 
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 나이지리아의 축구 선수}}}에 대한 내용은 [[캘빈 배시]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[캘빈 배시#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[캘빈 배시#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.

#!if 리스트 != null
{{{#!if 문서명1 != null
 * {{{#!if 설명1 != null
나이지리아의 축구 선수: }}}[[캘빈 배시]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[캘빈 배시#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[캘빈 배시#|]] 부분}}}}}}{{{#!if 문서명2 != null
 * {{{#!if 설명2 != null
: }}}[[]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명3 != null
 * {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
 * {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
 * {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
 * {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
 * {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
 * {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
 * {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
 * {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}

GNU Project
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -10px;"
<colbgcolor=#a32d2a><colcolor=#fff> 관련 문서 GNU · 자유 소프트웨어 재단 · 리처드 스톨먼
소프트웨어 Bash · GNOME · GNU Emacs · GNU IceCat · GNU/Linux · GNU Octave · GNU Screen · groff · GRUB · Midnight Commander · nano · R · Texinfo
<bgcolor=#a32d2a><color#fff> 유틸리티 coreutils(fileutils · textutils · shellutils) · GNU Grep · GnuPG · GNU Tar
<bgcolor=#a32d2a><color#fff> 개발자 도구 Autotools(autoconf · automake) · binutils(BFD · as · ld · gold · gdb) · GCC · glibc · GNU Make
라이선스 GNU 일반 공중 사용 허가서 · GNU 약소 일반 공중 사용 허가서 · GNU Affero 일반 공중 사용 허가서
기타 GNU Unifont
취소선: 독립한 프로젝트
}}}}}}}}} ||
[[프로그래밍 언어|'''프로그래밍 언어
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 목록 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=royalblue><colcolor=#fff> ※ 나무위키에 등재된 프로그래밍 언어 목록
AActionScript · Ada · Agda · ALGOL · APL · awk
BBASIC · Befunge · Brainfuck
CC · C# · C++ · Carbon · Chef · Clojure · COBOL · CoffeeScript · Coq · Crystal
DD · Dart
EElixir · Elm · emojicode · Erlang · ETA
FF# · Forth · Fortran
GGNU Octave · Go · Groovy
HHaskell · HolyC · HQ9+ · HRON
I
JJava · JavaScript · Julia
KKotlin · Krait
LLean · LISP · Lua
MMalbolge · MATLAB · Max · Mojo · Moonlight
NNim · Nix
OOberon · Objective-C · OCaml · Ook!
PPascal · Perl · PHP · Processing · Prolog · Python
QQ#
RR · Racket · Raku · ReasonML · Ruby · Rust
SScala · Scheme · Scratch · sed · Shakespeare · Shell Script · Smalltalk · Swift
TTypeScript
UUdon
VVisual Basic · Visual Basic .NET · Visual Basic for Applications · vvvv
WWave · Whitespace
X
Y
ZZenScript · Zig
한글누리 · 씨앗 · 아희 · 약속 · 엄랭 · 엔트리 · 창조}}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 순위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -10px"
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px -1px"
<tablewidth=100%><tablebgcolor=transparent><colbgcolor=#11a500><colcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 <colbgcolor=#ff1100><colcolor=#fff> 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++ }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ Stack Overflow 2024 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#ffa500><colcolor=#fff> 2024년 Stackoverflow 설문조사 상위 25개 프로그래밍 언어
1 JavaScript <colbgcolor=#ffa500><colcolor=#fff> 14 Rust
2 HTML & CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ TIOBE 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#2777c2><colcolor=#fff> 2025년 2월 TIOBE 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=#2777c2><colcolor=#fff> 11 Fortran
2 C++ 12 Scratch
3 Java 13 Rust
4 C 14 PHP
5 C# 15 R
6 JavaScript 16 MATLAB
7 SQL 17 Assembly language
8 Go 18 COBOL
9 Delphi / Object Pascal 19 Ruby
10 Visual Basic 20 Prolog }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ PYPL 2025 ]
{{{#!wiki style="margin: -5px -1px -10px"
<colbgcolor=green><colcolor=#fff> 2025년 3월 PYPL 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=green><colcolor=#fff> 11 Swift
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C/C++ 14 MATLAB
5 C# 15 Ada
6 R 16 Dart
7 PHP 17 Ruby
8 Rust 18 Lua
9 TypeScript 19 PowerShell
10 Objective-C 20 VBA }}}}}}}}}}}} }}}}}}}}}}}}
분류:프로그래밍 언어 · 프로그래밍 언어 목록 · 언어별 예제 · 틀:프로그래밍 언어 문법
배쉬
Bash
파일:BASH_logo-transparent-bg-color.svg파일:BASH_logo-transparent-bg-color.svg
파일:홈페이지 아이콘.svg | 파일:Git-Icon-1788C.svg
1. 개요2. Hello, world!3. 주의점
3.1. 흔한 오해의 예
4. 특징5. 관련 문서6. 외부 링크

1. 개요

배시(Bash, _B_ourne _A_gain _Sh_ell)는 GNU 프로젝트의 일부로, Bourne shell[1]을 대체하기 위해 만들어진 UNIX 계열 운영체제POSIX 이다. 거의 모든 리눅스 배포판에 기본 로그인 셸로 깔려있다. 그래서 보통 셸 스크립팅이라고 하면 십중팔구 Bash를 의미한다. 스크립트 언어답게 인터프리터로 돌아가며, C로 개발되었다.

2. Hello, world!

#!syntax sh
#!/bin/bash
echo "Hello, world!"

3. 주의점

Bash 스크립트가 엄밀히 말하면 프로그래밍 언어이긴 하지만 유닉스 운영체제의 인터페이스로 기능하는 셸이지 범용 언어는 아니므로 C계열 언어나 Python 같이 익숙한 타 언어와는 괴리가 심하다. 희한하게도 거의 모든 것이 문자열로 처리되고, 글롭 (glob), 중괄호 확장 (brace expansion), 패러미터 확장 (parameter expansion), 단어 분리 (word splitting) 등 버그가 없는 스크립트를 짜기 위해서는 꼼꼼하게 숙지해야 할 것들 천지다.

여타 프로그래밍 언어 소스코드와는 달리 원칙적으로는 확장자가 없는 게 권장된다 .sh 확장자도 쓰지 말자. Bash 스크립트 파일은 실행 파일로 취급되는데, 유닉스 계열에서 실행 파일은 확장자가 필요 없기 때문. 원래 실행 파일은 호출자에게 구현 세부사항을 노출하지 않는 게 원칙이다. 셸 스크립트는 확장자가 없어도 셔뱅이나 파일 내부 구조를 통해 구분이 가능하다... 지만 배포할 때는 이야기가 다른다. 실제로 여러 프로젝트에 첨부된 스크립트들에서 확장자가 많이 붙어 있다. 이는 여러 가지 shell 들의 문법이 미묘하게 다르기 때문에 CSH용, Bash 용 등을 따로 만들어야 되기 때문인데다, shebang을 보려면 아무튼 열어 봐야 하기 때문. 그리고 인터넷에서 다운받는다면 경우에 따라 권한이 손실될 수도 있어 이것이 실행 가능함을 알리기 위해 확장자를 붙이는 경우가 대부분이다.

인터넷상에 Bash에 대한 이해도가 낮은 사람이 작성한 듯한 튜토리얼이 매우 많기 때문에 잘 걸러서 볼 필요가 있다. 예를 들어 if문의 형식을 오해하거나, 쓸데없이 cat의 결과물을 파이핑하는데 쓰거나, 변수를 사용할 때 따옴표를 빼먹거나, ls로 파일 이름을 처리하는 행위 등이 있지만 특히 주의해야할 점은, Bash는 문법상 아예 오류를 내뱉는 경우가 드물다는 것이다. 다른 언어라면 세미콜론 하나 빼먹거나 변수 이름 오탈자 하나만 나도 컴파일러 또는 인터프리터가 친절하게 몇 번째 줄에서 문법 오류를 발견했다고 알려주지만, Bash에선 실수를 해도 문법 오류가 나는 게 아니라 작동은 하지만 예상치 못한 (틀린) 결과를 내는 경우가 부지기수다. 이렇게 함정이 도사리고 있는, 초보자에게 불친절한 Bash의 특성상 학습 교재나 온라인 가이드를 찾을 때, "이렇게 이렇게 이렇게 하면 된다"보다는 "이렇게 하면 되지만, 이렇게 하면 절대 안 된다!"같은 방식으로 서술된 자료를 찾는 것이 좋다.

3.1. 흔한 오해의 예

다른 프로그래밍 언어와 Bash의 작동 방식을 혼동하는 대표적인 사례는 다음과 같다.

인터넷에서는 if문의 형식을 if [ condition ]이라는 식으로 가르치는 곳이 많은데 완전히 틀린 설명이다. 옳은 형식은 if command이며, if는 command(명령)의 종료 코드(exit code)가 0이냐 아니냐에 따라 분기를 하는 키워드다.(0이면 if문 안으로 들어간다.) 대괄호는 "test"라는 명령의 또 다른 이름일 뿐이고, if 다음에 꼭 대괄호(또는 test 명령)가 들어가야 하는 건 아니다.

최종적으로 종료 코드가 나오기만 하면 상관없기 때문에 여러 개의 명령어를 파이프라인으로 이어줘도 된다. 단 세미콜론으로 명령어를 여러 개 묶는 것은 안된다. if문의 경우 if [ ] && [ ] && ...; 등으로 계속 이어질 수 있다.

4. 특징

가장 널리 쓰이는 유닉스 호환 셸 답게 강력한 기능을 많이 가지고 있는데 산술 연산에 필수적으로 외부 명령어가 필요하다는 점을 개선하여 산술 확장 기능을 추가했고 계산시마다 명령어의 실행 오버헤드가 없으므로 성능 향상이 매우 크다. 다만 단순한 반복 연산에서는 for 문과 seq 명령어로 대체 가능하기 때문에 반복문보다 수치 계산에 효과적이다.

산술 확장 기능을 사용하면 셸 변수를 C 계열 언어처럼 다루는 것이 가능하여 보통은 특수한 문법안에 감싸야 하는 계산 수식을 바로 작성할 수 있게 할 수 있다.

5. 관련 문서

6. 외부 링크


[1] 이름도 영문으로 다시 태어났다는 뜻인 "Born Again"의 말장난이다.[2] 인터넷에 떠돌아다니는 Bash 튜토리얼 중 정확한 정보를 많이 담고 있는 몇 안 되는 사이트다. 영어 주의.