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)