이 repo
명령은 어떤 종류의 따옴표를 가져도 상관 없습니다. 매개 변수 확장이 필요한 경우 큰 따옴표를 사용하십시오. 만약 당신이 많은 것을 백 슬래시해야하는 것을 의미한다면, 대부분의 경우 작은 따옴표를 사용한 다음, 그것들을 나누고 확장이 필요한 부분에 대해 두 배로 들어갑니다.
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
관심이 있다면 설명이 이어집니다.
쉘에서 명령을 실행할 때 해당 명령이 인수로받는 것은 null로 끝나는 문자열의 배열입니다. 이러한 문자열은 절대적으로 포함 할 수 있는 null 이외의 문자를.
그러나 쉘이 명령 행에서 문자열 배열을 작성할 때 일부 문자를 특수하게 해석합니다. 이것은 명령을보다 쉽게 입력 할 수 있도록 설계되었습니다. 예를 들어, 공백은 일반적으로 배열에서 문자열 사이의 경계를 나타냅니다. 이런 이유로 개별 논쟁은 때때로 "단어"라고 불립니다. 그럼에도 불구하고 논쟁에는 공백이있을 수있다. 쉘에 원하는 것을 알려주는 방법이 필요합니다.
문자 (공백 또는 다른 백 슬래시 포함) 앞에 백 슬래시를 사용하여 해당 문자를 문자 그대로 처리하도록 쉘에 지시 할 수 있습니다. 그러나 다음과 같이 할 수 있습니다.
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... 불쾌 할 수 있습니다. 따라서 쉘은 대체 인용 부호를 제공합니다. 이들은 두 가지 주요 품종으로 제공됩니다.
큰 따옴표는 "그룹 따옴표"라고합니다. 와일드 카드와 별칭이 확장되는 것을 방지하지만 대부분 단어에 공백을 포함하기위한 것입니다. 매개 변수 및 명령 확장 (으로 표시되는 종류)과 같은 다른 것들이 $
여전히 발생합니다. 물론 큰 따옴표 안에 리터럴 큰 따옴표를 원한다면 백 슬래시해야합니다.
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
작은 따옴표는 좀 더 드라코 니안입니다. 그들 사이의 모든 것은 백 슬래시를 포함하여 문자 그대로 완전히 취해집니다. 작은 따옴표 안에 리터럴 작은 따옴표를 얻는 방법은 절대 없습니다.
다행스럽게도 쉘의 인용 부호는 단어 분리 문자가 아닙니다 . 그들 스스로는 단어를 끝내지 않습니다. 동일한 단어 내에서 다른 유형의 따옴표 사이를 포함하여 따옴표를 입력하거나 사용하여 원하는 결과를 얻을 수 있습니다.
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
따라서 한 쌍의 인용 부호, 백 슬래시 리터럴 단일 인용 부호, 열린 단일 인용 부호 시퀀스에 익숙해지는 데 시간이 많이 걸리지 만 훨씬 쉽습니다.
현대 쉘은 POSIX 표준에 의해 지정되지 않은 다른 인용 스타일을 추가했으며, 앞에 작은 따옴표 앞에 달러 기호가 붙습니다. 인용 된 문자열은 ANSI C 프로그래밍 언어의 문자열 리터럴과 유사한 규칙을 따르므로 "ANSI 문자열"및 $'
... '
"ANSI 인용"쌍 이라고도 합니다. 이러한 문자열 내에서 백 슬래시에 대한 위의 조언은 더 이상 적용되지 않습니다. 대신, 다시 특수화됩니다. 역 슬래시를 앞에 추가하여 리터럴 작은 따옴표 나 백 슬래시를 포함시킬 수있을뿐만 아니라 쉘은 ANSI C 문자 이스케이프를 확장합니다 ( \n
줄 바꾸기, \t
탭 및 \xHH
문자 포함). 16 진 코드HH
). 그렇지 않으면 작은 따옴표로 묶인 문자열로 작동합니다. 매개 변수 또는 명령 대체가 발생하지 않습니다.
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
주목해야 할 것은 echo
명령에 대한 인수로 수신 된 단일 문자열 이이 모든 예에서 정확히 동일 하다는 것 입니다. 쉘이 명령 행을 구문 분석 한 후에는 명령이 실행 된 방법을 알 수있는 방법이 없습니다. 원하는 경우에도 마찬가지입니다.
repo forall -c ' ...before... '"$variable"' ...after...'