Bash의 단일 따옴표와 이중 따옴표의 차이
Bash에서 단일 따옴표 사이의 차이점은 무엇입니까?''및는 다음과 같습니다."")?
큰따옴표는 아무것도 삽입하지 않지만 큰따옴표는 삽입합니다. ": 변수, 역렬, 정특"\탈출 등
예:
$ echo "$(echo "upg")"
upg
$ echo '$(echo "upg")'
$(echo "upg")
Bash 설명서에는 다음과 같은 내용이 있습니다.
따옴표로 (따옴표로 묶습니다.
'따옴표 안에 있는 각 문자의 리터럴 값을 유지합니다.백슬래시가 선행되는 경우에도 단일 따옴표 사이에 단일 따옴표가 발생하지 않을 수 있습니다.를 묶습니다(따옴표로 문자를 .
"따옴표 안에 있는 모든 문자의 리터럴 값을 보존합니다.$,`,\된 경우에는, " " 기확이활되면화성장"!캐들터.$그리고.`큰따옴표 안에서 특별한 의미를 유지합니다(셸 확장 참조).백슬래시는 다음 문자 중 하나가 이어지는 경우에만 특별한 의미를 유지합니다.$,`,",\에서, 이 중 에 오는 됩니다.큰따옴표 안에서 이러한 문자 중 하나 뒤에 오는 백슬래시가 제거됩니다.특별한 의미가 없는 문자 앞의 백슬래시는 수정되지 않은 채로 남아 있습니다.이중 따옴표는 백슬래시로 앞에 붙여서 큰따옴표 내에서 따옴표로 묶을 수 있습니다. ""이 수행되지 한 history expansion이 됩니다. 그렇지 않은 경우!백슬래시를 사용하여 큰따옴표로 표시되지 않습니다. 앞에 .!제거되지 않습니다.
받아들여진 답변은 훌륭합니다.저는 주제를 빨리 이해하는 데 도움이 되는 표를 만들고 있습니다.설명은 단순 변수를 포함합니다.a 배열뿐만 arr.
우리가 설정하면,
a=apple # a simple variable
arr=(apple) # an indexed array with a single element
그리고 나서.echo두 번째 열에 있는 표현식은 세 번째 열에 표시된 결과/동작을 얻을 수 있습니다.네 번째 열은 동작을 설명합니다.
| # | 표현 | 결과 | 평. |
|---|---|---|---|
| 1 | "$a" |
apple |
는 변가내서확다니 안에서 됩니다."" |
| 2 | '$a' |
$a |
는 변가내부확않다았니 안에서 .'' |
| 3 | "'$a'" |
'apple' |
''는 내에특의없다습니미가한별 안에 특별한 ."" |
| 4 | '"$a"' |
"$a" |
""문자 그대로 내부에서 처리됩니다.'' |
| 5 | '\'' |
무효한 | 을 면할 수 '에 내에''임쓰를 합니다."'"또는$'\'' 견적ANSI-C 참조) |
| 6 | "red$arocks" |
red |
$arocks하지 .$a임쓰를 합니다.${a}rocks보존하기 위해$a |
| 7 | "redapple$" |
redapple$ |
$에 변수 이 없으면 다에변 않습다니지평되가이로 됩니다.$ |
| 8 | '\"' |
\" |
\는 내에특의없다습니미가한별 안에 특별한 .'' |
| 9 | "\'" |
\' |
\'는 내에서해다니석됩부다 안에서 됩니다."" 하만의없습다니가미지ance에는 의미가 .' |
| 10 | "\"" |
" |
\"는 내에서해다니석됩부다 안에서 됩니다."" |
| 11 | "*" |
* |
은 glob 내부에서 .""또는'' |
| 12 | "\t\n" |
\t\n |
\t그리고.\n속에 특별한 의미가 없습니다.""또는''ANSI-C 견적 사용 |
| 13 | "`echo hi`" |
hi |
``그리고.$() 안에서 됩니다."" (백쿼터는실출서유지됨에력제백 |
| 14 | '`echo hi`' |
`echo hi` |
``그리고.$()에서 않음지평 안에서 .'' (백쿼터는실출서유지됨에력제백 |
| 15 | '${arr[0]}' |
${arr[0]} |
▁access 안에서는 어레이 합니다.'' |
| 16 | "${arr[0]}" |
apple |
어레이 액세스가 내부에서 작동합니다."" |
| 17 | $'$a\'' |
$a' |
단일 따옴표는 ANSI-C 견적 내에서 이스케이프할 수 있습니다. |
| 18 | "$'\t'" |
$'\t' |
은 ANSI-C에서 해석되지 않습니다."" |
| 19 | '!cmd' |
!cmd |
문자 록기확 문자장'!'는 에무됨시 내부에서 됩니다.'' |
| 20 | "!cmd" |
cmd args |
에서는 가장 에 일치하는 와 일치하는 명령어는 다음과 같습니다."cmd" |
| 21 | $'!cmd' |
!cmd |
문자 록기확 문자장'!'ANSI-C 따옴표 내에서 무시됩니다. |
참고 항목:
어떤 것을 반향시킬 때 어떤 일이 일어나는지를 언급한다면, 단일 따옴표는 문자 그대로 그들 사이에 있는 것을 반향시키는 반면, 이중 따옴표는 그들 사이의 변수를 평가하고 변수의 값을 출력합니다.
예를 들어, 이것은
#!/bin/sh
MYVAR=sometext
echo "double quotes gives you $MYVAR"
echo 'single quotes gives you $MYVAR'
다음을 제공합니다.
double quotes gives you sometext
single quotes gives you $MYVAR
다른 사람들은 그것을 아주 잘 설명했고, 저는 단지 간단한 예를 들어 설명하고 싶습니다.
텍스트 주위에 작은 따옴표를 사용하여 셸이 특수 문자를 해석하지 못하도록 할 수 있습니다.달러 기호, 공백, 앰퍼샌드, 별표 및 기타 특수 문자는 작은 따옴표로 묶이면 모두 무시됩니다.
echo 'All sorts of things are ignored in single quotes, like $ & * ; |.'
다음과 같은 이점을 제공됩니다.
All sorts of things are ignored in single quotes, like $ & * ; |.
단 하나의 따옴표 안에 넣을 수 없는 것은 하나의 따옴표뿐입니다.
큰따옴표는 작은따옴표와 비슷하게 작동하지만 큰따옴표는 셸이 달러 기호, 뒷따옴표 및 뒷슬래시를 해석할 수 있도록 허용한다는 점을 제외하고는 동일합니다.백슬래시는 특수 문자 하나를 해석할 수 없도록 하는 것으로 이미 알려져 있습니다.이는 변수 대신 텍스트로 달러 기호를 사용해야 하는 경우 큰따옴표 내에서 유용할 수 있습니다.또한 큰따옴표를 이스케이프할 수 있으므로 따옴표가 따옴표 문자열의 끝으로 해석되지 않습니다.
echo "Here's how we can use single ' and double \" quotes within double quotes"
다음과 같은 이점을 제공됩니다.
Here's how we can use single ' and double " quotes within double quotes
따옴표로 묶인 문자열의 시작으로 해석되는 아포스트로피가 큰따옴표 내에서 무시된다는 점도 주목할 수 있습니다.그러나 변수는 해석되고 큰따옴표 내의 값으로 대체됩니다.
echo "The current Oracle SID is $ORACLE_SID"
다음과 같은 이점을 제공됩니다.
The current Oracle SID is test
백 따옴표는 단일 따옴표 또는 이중 따옴표와 완전히 다릅니다.뒷따옴표는 특수 문자의 해석을 방지하는 데 사용되는 대신 실제로 포함된 명령을 강제로 실행합니다.동봉된 명령이 실행된 후에는 원래 행의 뒷따옴표 대신 출력이 대체됩니다.이것은 예를 들어 설명하면 더 명확해질 것입니다.
today=`date '+%A, %B %d, %Y'`
echo $today
다음과 같은 이점을 제공됩니다.
Monday, September 28, 2015
이것이 Bash에서 인용문을 다룰 때 사실상의 답이기 때문에 위의 답변에서 누락된 한 가지를 셸의 산술 연산자를 다룰 때 추가하겠습니다.
은 두 연산 하는데, 된 Bash 셸가 산지연방지다에 의해 됩니다. 하나는 기본 제공으로 정의됩니다.let 명령어를 합니다.$((..)). 전자는 표현에 .전자는 산술 표현식을 평가하고 후자는 복합 문장에 가깝습니다.
다음과 같이 사용되는 산술 표현식을 이해하는 것이 중요합니다.let다른 셸 명령과 마찬가지로 워드 프로세서, 경로 이름 확장을 수행합니다.따라서 적절한 견적과 탈출이 이루어져야 합니다.
이예참을 사용할 때 이 하십시오.let:
let 'foo = 2 + 1'
echo $foo
3
여기서는 변수 확장이 필요 없기 때문에 여기서는 단일 따옴표를 사용하는 것이 좋습니다.의 경우를 생각해 보십시오.
bar=1
let 'foo = $bar + 1'
그것은 비참하게 실패할 것입니다.$bar단일 따옴표 아래는 확장되지 않으며 다음과 같이 이중 따옴표로 묶어야 합니다.
let 'foo = '"$bar"' + 1'
이유 중입니다, 이은이것입다니하일나중유것▁this,,다니▁the이▁reasons것입▁be▁should것▁one▁the▁of,$((..))항상 과도하게 사용하는 것을 고려해야 합니다.let왜냐하면 그 안에는 내용물이 낱말로 나누어져 있지 않기 때문입니다.의 예는 이예제전한용을 사용한 입니다.let라고 간단히 말할 수 있습니다.
(( bar=1, foo = bar + 1 ))
항사용야함해를 사용하는 하세요.$((..))
록비록▁the비.$((..))큰따옴표와 함께 사용할 수 있으며, 큰따옴표가 필요한 콘텐츠를 포함할 수 없기 때문에 사용할 목적이 없습니다.인용문이 하나도 없는지 확인하십시오.
printf '%d\n' '$((1+1))'
-bash: printf: $((1+1)): invalid number
printf '%d\n' $((1+1))
2
printf '%d\n' "$((1+1))"
2
아마도 어떤 특별한 경우에 사용할 수 있습니다.$((..))따옴표로 묶은 단일 문자열 내의 연산자는 따옴표를 사용하지 않거나 큰따옴표 아래에 두는 방식으로 따옴표를 보간해야 합니다.예를 들어, 내부 연산자를 사용하려는 경우를 고려합니다.curl요청이 있을 때마다 카운터를 통과하는 진술, 실행
curl http://myurl.com --data-binary '{"requestCounter":'"$((reqcnt++))"'}'
문자열 " " " " " " " " " 를 사용하지 않습니다.$((reqcnt++))는 에전니다됩으로 됩니다.requestCounter밭.밭.
의 사용 사이에는 명확한 차이가 있습니다.' '그리고." ".
때' '모든 것에 사용되며, "번역 또는 번역"은 수행되지 않습니다.그대로 인쇄되어 있습니다.
와 함께" "그것이 무엇을 둘러싸든, 그것의 가치로 "변환되거나" 변환됩니다.
번역/변환이란 다음을 의미합니다.단일 따옴표 내의 모든 항목은 해당 값으로 "변환"되지 않습니다.그들은 인용문 안에 있는 그대로 받아들여질 것입니다. 예:a=23,그리고나서echo '$a'을 생산할 것입니다.$a표준 출력으로반면에.echo "$a"을 생산할 것입니다.23표준 출력으로
사람들이 제가 해야 했던 것처럼 많은 시간을 보내지 않고 살아가기 위해서는 최소한의 대답이 필요합니다.
다음은 (답을 찾는 사람들에게) 놀랍게도 완전한 명령입니다.
$ echo '\'
다음의 출력을 사용할 수 있습니다.
\
백슬래시는, 놀랍게도, bash의 오랜 사용자들에게도, 단일 따옴표 안에 의미가 없습니다.다른 것들도 마찬가지입니다.
언급URL : https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash
'programing' 카테고리의 다른 글
| Git에서 분기를 삭제하는 시기는 언제입니까? (0) | 2023.05.01 |
|---|---|
| Azure 서비스 버스 대기열의 내용 보기 (0) | 2023.05.01 |
| here-discovery는 '예상치 못한 파일 종료' 오류를 제공합니다. (0) | 2023.05.01 |
| mongo 명령 결과를 플랫 파일로 가져오는 방법 (0) | 2023.05.01 |
| Git Pull에서 Git 오류 발생(로컬 참조를 업데이트할 수 없음) (0) | 2023.05.01 |