명령 줄에서 큰 따옴표 "", 작은 따옴표 ''및 역 따옴표``의 차이점은 무엇입니까?


43

명령 줄에서 다음과 같은 문자를 많이 사용하는 웹 사이트 나이 사이트의 게시물을 자주 볼 수 있습니다. 종종 그것들은 꽤 비슷한 목적으로 사용되는 것 같습니다. 명령 줄이나 셸 프로그래밍에 사용될 때 차이점은 무엇입니까? 어떤 목적으로 어떤 것을 사용합니까?

" " double quotes

' ' single quotes

` ` backticks

답변:


43

예를 들어, 변수 foouname( foo=uname) 가 포함되어 있다고 가정하십시오 .

  • echo "$foo"uname변수를 텍스트로 대체하여 출력 합니다.
    • 따옴표 $안에 리터럴 문자 "를 사용하려면 \$; 리터럴의 경우을 "사용하십시오 \".
  • echo '$foo'$foo정확한 문자열을 출력 합니다.
    • 심지어 '으로 탈출 할 수없는 \'내부 '따옴표. 하지만 당신은 사용할 수 있습니다 'foo'\''bar'.
  • echo `$foo`출력 Linux변수의 내용을 실행하고 echo그것을 인쇄.

\작은 따옴표로 묶을 때는 항상 앞에 문자가 포함되어 있어도 문자 그대로 처리됩니다 '. 여는 후 '다음 '은 항상 닫는 따옴표로 해석됩니다. '작은 따옴표로 묶은 문자열에서 인용하는 것과 같은 것은 인용을 끝내고 '개별적으로 탈출 한 다음 다시 인용을 시작하여 얻을 수 있습니다 . 즉, \'여는 '문자 와 닫는 문자 사이에는 작동하지 않지만 그렇지 '\''않습니다. (참고 내가 같은 실수를했던 내 게시물 중 하나 보정 자세한 내용은.)
엘리야 케이건

11

이것은 bash 매뉴얼 의 관련 섹션 에 아주 잘 설명되어 있습니다. 간단히 말해서 작은 따옴표 안에있는 것은 문자 그대로 해석됩니다. 예를 들어,

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

인용되지 않은 버전과 비교하십시오.

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

큰 따옴표는 변수 확장을 허용합니다 (역사 확장 및 기타 사항도 가능). 기본적으로 확장하고 싶은 것을 다룰 때 사용합니다. 예를 들면 다음과 같습니다.

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

따옴표를 보호하면서 즉, 작은 따옴표는 완전히 쉘에서 문자열을 보호하는 몇 가지 것들 (예를 들어 공간)하지만 변수와 특수 문자가 올바르게 해석 / 확장 할 수 있습니다.


1
사실 이후 OP가 변경되었는지 확실하지 않지만이 답변에 백틱이 언급되어 있지 않습니까?
Alexander Mills

5

작은 따옴표 ( '')는 따옴표로 묶은 각 문자의 리터럴 값을 유지하는 데 사용됩니다.

큰 따옴표 ( "")를 사용 하면 달러 기호 ( $), 백틱 (뒤로 작은 따옴표 ``) 및 백 슬래시 ( \)를 제외한 모든 문자의 리터럴 값이 유지 됩니다.

백틱 ( ``) 안에 포함 된 쉘은 "백틱 내부의 명령 출력"을 의미하는 것으로 해석합니다. 명령 출력이 명령 자체를 대체하므로이를 "명령 대체"라고합니다.

참고 문헌 :


3
echo '$HOME' is "$HOME"

작은 따옴표는 변수 확장을 방지하고 큰 따옴표는 허용합니다.


2

일반적으로 말하고 있지만 :

""-출력 전에 일부 정보를 처리하는 데 사용됩니다. (PHP처럼)

  • 예를 들면 다음과 name=NESS; echo "Hello my name is $name"같습니다.Hello my name is NESS

''-출력을 그대로 보여줍니다. (PHP에서도 마찬가지입니다.)

  • 위의 예를 사용하면 출력됩니다. Hello my name is $name

큰 따옴표와 작은 따옴표의 차이점은 큰 따옴표는 변수를 처리하고 값을 표시하는 반면 작은 따옴표는 처리하지 않고 변수의 이름을 표시한다는 것입니다.

`` -나중에 다른 변수에 지정된 명령을 인용하는 데 사용됩니다.


1

작은 따옴표는 문자 그대로 사용되는 값을 묶습니다. 모든 유형의 확장이 억제됩니다. 일반적으로 값이 포함되어있는 경우 사용 또는 공백 (공백, 탭, 개행) 또는 특수 문자 (포함 $, \, `사용자가 / 확장 쉘에 의해 특별하게 취급하고 싶지 않은 것을 참조).

큰 따옴표는 변수와 문자 교체가 수행되는 값을 묶습니다. 출력에 공백이 포함될 수 있고 단일 값으로 지정되어야 할 때 필요합니다.

역 따옴표는 명령을 포함하며 그 결과는 값으로 요구됩니다. 최신 쉘 $(...)은 대신에 사용할 수 있습니다 `...`. 나는 새로운 방법을 선호합니다.

다음 코드는 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 수 있습니다.

CMD = 'ls.'
에코 스퀘어 : $ CMD
$ CMD 설정
에코 1 차 : $ 1
반향 : $ *
"$ CMD"설정
에코 dq : $ 1
에코 bq :`$ CMD`
새로운 에코 : $ ($ CMD)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.