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 |