수색…


통사론

  • \ 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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow