
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)