수색…
통사론
- \ C (개행을 제외한 한 문자)
- '작은 따옴표를 제외한 모든 문자 그대로'; 'this :'\ ''는 작은 따옴표입니다. '
- $ '만 \\과 \'는 특별합니다. \ n = 개행 등. '
- "$ 변수 및 기타 텍스트; \"\\\ $ \ "는 특수"
개행 문자 및 제어 문자
개행 문자는 단일 문자열이나 큰 따옴표로 묶은 문자열에 포함될 수 있습니다. backslash-newline은 줄 바꿈을하지 않으며 줄 바꿈은 무시됩니다.
newline1='
'
newline2="
"
newline3=$'\n'
empty=\
echo "Line${newline1}break"
echo "Line${newline2}break"
echo "Line${newline3}break"
echo "No line break${empty} here"
달러 인용 문자열 안에는 백 슬래시 문자 또는 백 슬래시 8 진수를 사용하여 다른 많은 프로그래밍 언어와 마찬가지로 제어 문자를 삽입 할 수 있습니다.
echo $'Tab: [\t]'
echo $'Tab again: [\009]'
echo $'Form feed: [\f]'
echo $'Line\nbreak'
변수 및 명령 대체에 대한 큰 따옴표
가변 치환은 큰 따옴표 안에 사용해야합니다.
calculation='2 * 3'
echo "$calculation" # prints 2 * 3
echo $calculation # prints 2, the list of files in the current directory, and 3
echo "$(($calculation))" # prints 6
따옴표의 외부, $var
값 소요 var
공백으로 구분 된 부분으로 분할하고, 글로브 (와일드 카드) 패턴으로 각 부분을 해석합니다. 이 동작을 원한다면 항상 $var
를 큰 따옴표 안에 넣으십시오 : "$var"
.
명령 대체에도 동일하게 적용됩니다. "$(mycommand)"
는 mycommand
의 출력이고 $(mycommand)
는 split + glob 결과입니다.
echo "$var" # good
echo "$(mycommand)" # good
another=$var # also works, assignment is implicitly double-quoted
make -D THING=$var # BAD! This is not a bash assignment.
make -D THING="$var" # good
make -D "THING=$var" # also good
명령 대체는 자신의 인용 컨텍스트를 가져옵니다. 파서가 탐욕 최초의 검색 대신 중첩 깊이를 추적하기 때문에 임의의 중첩 대체를 작성하는 것은 쉽다 "
문자 StackOverflow의 구문 형광펜 예를 들어 있지만, 이것은 잘못된 구문 분석합니다.. :
echo "formatted text: $(printf "a + b = %04d" "${c}")" # “formatted text: a + b = 0000”
명령 대체에 대한 변수 인수는 확장 내에서 큰 따옴표로 묶어야합니다.
echo "$(mycommand "$arg1" "$arg2")"
리터럴 텍스트 인용
이 단락의 모든 예제는 행을 인쇄합니다.
!"#$&'()*;<=>? @[\]^`{|}~
백 슬래시는 다음 문자를 인용합니다. 즉, 다음 문자는 문자 그대로 해석됩니다. 하나의 예외는 개행 문자입니다. 백 슬래시 - 개행 문자는 빈 문자열로 확장됩니다.
echo \!\"\#\$\&\'\(\)\*\;\<\=\>\?\ \ \@\[\\\]\^\`\{\|\}\~
작은 따옴표 사이의 모든 텍스트는 (앞으로 인용 '
도 어포 스트로피로 알려진) 그대로 인쇄됩니다. 백 슬래시조차도 그 자체를 의미하며 작은 따옴표를 포함하는 것은 불가능합니다. 대신 리터럴 문자열을 중지하고 리터럴 작은 따옴표를 백 슬래시와 함께 포함하고 리터럴 문자열을 다시 시작할 수 있습니다. 따라서 4 문자 시퀀스 '\''
는 리터럴 문자열에 작은 따옴표를 포함 할 수 있습니다.
echo '!"#$&'\''()*;<=>? @[\]^`{|}~'
# ^^^^
Dollar-single-quote는 백 슬래시가 다음 문자를 인용하는 많은 다른 프로그래밍 언어와 마찬가지로 문자열 리터럴 $'…'
시작합니다.
echo $'!"#$&\'()*;<=>? @[\\]^`{|}~'
# ^^ ^^
큰 따옴표는 "
반 리터럴 문자열 문자 만 구분 "
\
$
와 `
유지 그들의 특별한 의미를. 이 문자 앞에는 백 슬래시가 있어야합니다 (백 슬래시 뒤에 다른 문자가 오면 백 슬래시가 남음). 큰 따옴표는 변수 또는 명령 대체를 포함 할 때 주로 유용합니다.
echo "!\"#\$&'()*;<=>? @[\\]^\`{|}~"
# ^^ ^^ ^^
echo "!\"#\$&'()*;<=>? @[\]^\`{|}~"
# ^^ ^ ^^ \[ prints \[
대화식으로 조심하십시오 !
큰 따옴표 안에 히스토리 확장을 시작합니다 : "!oops"
는 oops
포함하는 오래된 명령을 찾습니다; "\!oops"
는 기록 확장을하지 않지만 백 슬래시를 유지합니다. 이것은 스크립트에서 발생하지 않습니다.
큰 따옴표와 작은 따옴표의 차이점
큰 따옴표 | 작은 따옴표 |
---|---|
변수 확장 허용 | 변수 확장 방지 |
활성화 된 경우 기록 확장을 허용합니다. | 역사 확대 방지 |
명령 대체를 허용합니다. | 명령 대체 방지 |
* 와 @ 는 특별한 의미를 가질 수 있습니다. | * 와 @ 는 항상 리터럴입니다. |
작은 따옴표 나 큰 따옴표를 모두 포함 할 수 있습니다. | 작은 따옴표 안에 작은 따옴표를 사용할 수 없습니다. |
$ , ` , " , \ 는 특별한 의미를 갖지 않으려면 \ 로 이스케이프 처리 할 수 있습니다. | 모두 리터럴입니다. |
둘 다 공통적 인 속성 :
- 글로빙 방지
- 단어 분리를 방지합니다.
예 :
$ echo "!cat"
echo "cat file"
cat file
$ echo '!cat'
!cat
echo "\"'\""
"'"
$ a='var'
$ echo '$a'
$a
$ echo "$a"
var