정의된 문자열 변수를 프로그래밍 언어의 언어 bash
로 전달할 수 있도록 큰따옴표를 유지해야 합니다 . Scheme
제 질문은 다른 작은따옴표 세트 안에 큰따옴표가 남아 있는 이유는 무엇입니까? 이를 설명하기 위해 몇 가지 예를 들어 보겠습니다 bash command prompt
.
$ str1=hey
$ echo $str1
hey
$ str2="hey"
$ echo $str2
hey
$ str3='hey'
$ echo $str3
hey
$ str4='"hey"'
$ echo $str4
"hey"
$ str5="'hey'"
$ echo $str5
'hey'
$
답변1
작은따옴표로 묶인 문자열은 문자열을 리터럴로 유지합니다. 큰따옴표로 묶인 문자열은 변수 보간 및 확장을 통해 문자열을 보존합니다. Bash 매뉴얼 페이지에서 이에 대해 설명합니다. QUOTING 섹션을 참조하세요.
인용 메커니즘에는 이스케이프 문자, 작은따옴표, 큰따옴표의 세 가지가 있습니다.
따옴표가 없는 백슬래시(\)는 이스케이프 문자입니다. {newline}을 제외하고 다음 문자의 리터럴 값을 유지합니다. \{newline} 쌍이 발생하고 백슬래시 자체가 인용되지 않으면 \{newline}은 줄 연속으로 처리됩니다(즉, 입력 스트림에서 제거되어 사실상 무시됩니다).
문자를 작은따옴표로 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다.앞에 백슬래시가 있더라도 작은따옴표 사이에는 작은따옴표를 사용할 수 없습니다.
문자를 큰따옴표로 묶으면 기록 확장이 활성화된 경우 $, `, \ 및 !를 제외한 따옴표 안의 모든 문자의 리터럴 값이 유지됩니다. $ 및 ` 문자는 큰따옴표 안에 특별한 의미를 유지합니다. 백슬래시는 뒤에 $, `, ", \ 또는 {newline} 문자 중 하나가 올 때만 특별한 의미를 유지합니다. 큰따옴표 안에 백슬래시를 추가하여 큰따옴표를 따옴표로 묶을 수 있습니다. 활성화되면 기록 확장이 수행됩니다. 큰따옴표 안에 !를 표시하려면 백슬래시를 사용하세요. 그렇지 않으면 작업이 수행됩니다.
답변2
기본적으로 문자를 작은따옴표나 큰따옴표로 묶으면 특별한 의미가 없는 리터럴 문자로 변환됩니다(큰따옴표에 대한 몇 가지 예외가 있지만 여기서는 중요하지 않습니다). 따라서 일련의 문자 내에서 '"hey"'
작은따옴표는 다른 모든 문자를 "보호"하고 큰따옴표는 특별한 의미를 잃고 리터럴 문자로 유지됩니다.