'와 "의 차이점은 무엇입니까? [복제]

'와 "의 차이점은 무엇입니까? [복제]

Bash 스크립트에서 텍스트 파일을 만들려고 합니다.

echo명령은 여러 줄에 걸쳐 있으며 큰따옴표 ""가 있습니다.

#!/bin/bash 

echo "blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla" > /root/bin/bla

명령에 큰따옴표 ""가 많이 있는데 echo이는 바람직하지 않습니다.

내가 해냈어

#!/bin/bash 

echo 'blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla' > /root/bin/bla

큰따옴표 "와 작은따옴표 ' 사이에 차이점이 있는지 알고 싶습니다.

어느 것이 더 높은 우선순위를 갖고 있나요? 단지 시각적으로 다르기 때문일까요?

답변1

~에서배쉬 매뉴얼:

3.1.2.2 작은따옴표

작은따옴표(''')로 문자를 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다. 앞에 백슬래시가 있더라도 작은따옴표 사이에는 작은따옴표를 사용할 수 없습니다.

3.1.2.3 큰따옴표

문자를 큰따옴표('"')로 묶으면 기록 확장이 활성화된 경우 '$', '`', '\' 및 '!'를 제외한 따옴표 안의 모든 문자의 리터럴 값이 유지됩니다. `'는 큰따옴표 내에서 특별한 의미를 유지하며(셸 확장 참조) 백슬래시는 뒤에 '$', '`', '"', ' 문자 중 하나가 올 때만 특별한 의미를 유지합니다. \' 또는 개행 문자. 큰따옴표 내에서 이러한 문자 중 하나 뒤에 오는 백슬래시가 제거됩니다. 특별한 의미가 없는 선행 백슬래시 문자는 변경되지 않습니다. 큰따옴표 앞에 백슬래시를 추가하면 큰따옴표 안에 큰따옴표를 넣을 수 있습니다. 활성화되면 "!"가 큰따옴표 안에 표시되고 백슬래시로 이스케이프되지 않는 한 기록 확장이 수행됩니다. 앞에 있는 '!'의 백슬래시는 제거되지 않습니다. 특수 매개변수 '*' 및 '@'는 큰따옴표로 묶인 경우 특별한 의미를 갖습니다(셸 매개변수 확장 참조).

위의 내용에 대한 몇 가지 실제 데모는 다음과 같습니다.

  • 큰따옴표는 계산된 매개변수 확장을 허용하지만 작은따옴표는 허용하지 않습니다.
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
  • 큰따옴표를 사용하면 백슬래시 이스케이프를 평가할 수 있지만 작은따옴표는 다음을 수행할 수 없습니다.
$ echo "\\"
\
$ echo '\\'
\\
  • 큰따옴표는 계산된 명령 대체( $(, `)를 허용하지만 작은따옴표는 다음을 허용하지 않습니다.
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)

관련 정보