{{위키데이터 속성 추적}}
{{infobox punctuation
|mark=<nowiki>#!</nowiki>
|name = 셔뱅
}}
'''셔뱅'''(shebang)은 [[해시 기호]]와 [[느낌표]](#!)로 이루어진 문자 시퀀스로, [[스크립트 언어|스크립트]]의 맨 처음에 온다. 샤-뱅(sha-bang)<ref>{{웹 인용|제목=Advanced Bash Scripting Guide|url=http://tldp.org/LDP/abs/html/sha-bang.html|accessdate=2012-01-19}}</ref><ref name="in-ulm.de">{{웹 인용|제목=The #! magic, details about the shebang/hash-bang mechanism|url=http://www.in-ulm.de/~mascheck/various/shebang/|accessdate=2012-01-19}}</ref><ref>{{서적 인용
|last=Cooper
|first=Mendel
|제목=Advanced Bash Scripting Guide 5.3 Volume 1
|publisher=lulu.com
|date=5 November 2010
|isbn=978-1-4357-5218-4
|page=5
|url=http://books.google.com/books?id=WPXkgFRd4OEC&lpg=PA5&dq=sha-bang&pg=PA5#v=onepage&q=sha-bang&f=false
}}</ref>, 해시뱅(hashbang)<ref>{{서적 인용
|last=MacDonald
|first=Matthew
|제목=HTML5: The Missing Manual
|publisher=[[오라일리 미디어]]
|location=Sebastopol, California
|year=2011
|isbn=978-1-4493-0239-9
|page=373
|url=http://books.google.com/books?id=SR7HXy2XvBEC&pg=PA373
}}</ref><ref>{{서적 인용
|last=Lutz
|first=Mark
|제목=Learning Python
|edition=4th
|publisher=[[오라일리 미디어]]
|date=September 2009
|isbn=978-0-596-15806-4
|page=48
|url=http://books.google.com/books?id=1HxWGezDZcgC&pg=PA48
}}</ref>, 파운드-뱅(pound-bang)<ref name="in-ulm.de"/><ref>{{서적 인용
|last=Lie Hetland
|first=Magnus
|제목=Beginning Python: From Novice to Professional
|publisher=Apress
|date=4 October 2005
|isbn=978-1-59059-519-0
|page=21
|url=http://books.google.co.uk/books?id=S0l1YFpRFVAC&lpg=PA21&dq=pound%20bang&pg=PA21#v=onepage&q=pound%20bang&f=false
}}</ref>, 해시-플링(hash-pling)<ref name="in-ulm.de"/><ref>{{서적 인용
|last=Schitka
|first=John
|제목=Linux+ Guide to Linux Certification
|publisher=Course Technology
|date=24 December 2002
|isbn=978-0-619-13004-6
|page=353
|url=http://books.google.co.uk/books?id=l7JhL9rJLEgC&lpg=PA353&dq=hashpling&pg=PA353#v=onepage&q=hashpling&f=false
}}</ref>, 크런치뱅(crunchbang)이라고도 한다.

[[유닉스 계열]] 운영 체제에서 셔뱅이 있는 스크립트는 프로그램으로서 실행되며, [[로더 (컴퓨팅)|프로그램 로더]]가 스크립트의 첫 줄의 나머지 부분을 인터프리터 지시자(interpreter directive)로 구문 분석한다. 즉, 지정된 인터프리터 프로그램이 대신 실행되어 스크립트의 실행을 시도할 때 처음 사용되었던 경로를 인수로서 넘겨주게 된다.<ref name="linux">{{웹 인용|제목=execve(2) - Linux man page|url=http://linux.die.net/man/2/execve|accessdate=2010-10-21}}</ref> 이를테면 스크립트의 경로가 ''path/to/script''이고 다음의 줄로 시작한다면:
 #!/bin/sh
프로그램 로더는 프로그램 ''/bin/sh''를 대신 실행하되 ''path/to/script''를 첫 번째 인수로 넘겨준다.

셔뱅 줄은 일반적으로 인터프리터에 의해 무시되는데 그 까닭은 "#" 문자가 수많은 스크립트 언어에서 [[주석 (프로그래밍)|주석]] 표시자이기 때문이다. [[스킴 (프로그래밍 언어)|스킴]]처럼 해시 마크를 주석 시작으로 사용하지 않는 일부 언어 인터프리터들은 목적에 맞게 셔뱅 줄을 무시하기도 한다. 다른 해결 방안으로는 전처리기에 의존하여 스크립트의 나머지 부분이 컴파일러나 인터프리터에 넘겨지기 전에 셔뱅 줄을 제거하거나 평가하게끔 하는 방법이다. 이를테면 여러 운영 체제에서 [[프리 파스칼]]로 작성된 프로그램을 실행할 수 있도록 하는 [[InstantFPC]]의 경우가 그러하다.<ref>[http://wiki.freepascal.org/InstantFPC InstantFPC documentation]</ref>

== 문법 ==
셔뱅 [[인터프리터 지시자]]의 형태는 다음과 같다:<ref name="linux"/>
 #!''interpreter'' [''optional-arg'']
여기서 interpreter는 실행 프로그램의 절대 경로여야 한다. (인터프리터 프로그램이 스크립트인 경우 셔뱅도 함께 포함해야 함) optional-arg는 선택 사항으로서 넣지 않아도 되며, 넣을 경우 하나의 변수여야 한다. (이식성을 이유로 어떠한 공백도 포함하지 않아야 함) #! 다음의 공백은 선택 사항이다.<ref name="in-ulm.de"/>

== 예 ==
셔뱅 줄의 예는 다음과 같다:
* {{code|#!/bin/sh}} — ''/bin/sh'' 경로의 [[본 셸]] 또는 호환 셸을 이용하여 파일을 실행
* {{code|#!/bin/csh -f}} — [[C 셸]](csh) 또는 호환 셸을 이용하여 파일을 실행하고, 시작 시 사용자의 .cshrc 파일의 실행을 방지
* {{code|#!/usr/bin/perl -T}} — [[테인트 검사]] 옵션으로 [[펄]]을 이용하여 실행

== 같이 보기 ==
* [[크런치뱅 리눅스]]
* {{임시링크|파일 연결|en|File association}}

== 각주 ==
<references />

== 외부 링크 ==
* {{언어링크|en}} [http://www.in-ulm.de/~mascheck/various/shebang/ Details about the shebang mechanism on various Unix flavours]
* {{언어링크|en}} [http://homepages.cwi.nl/~aeb/std/hashexclam.html #! - the Unix truth as far as I know it] (a more generic approach)
* {{언어링크|en}} [http://foldoc.org/shebang FOLDOC shebang article]

{{전거 통제}}

[[분류:유닉스]]