2016-10-19 2 views
1

스크립트 내에서 다음은 실패합니다 배치 :PowerShell을 중첩 여기에 문자열

$MyString = @' 
hello 
@' 
'@ 
bye 
'@ 

write-host $MyString 

오류가 반환됩니다 다음과 같이

At C:\scripts\test.ps1:6 char:1 
+ '@ 
+ ~~ 
The string is missing the terminator: '. 
    + CategoryInfo   : ParserError: (:) [], ParseException 
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString 

는 역 따옴표와 중첩 @''@를 앞에 덧붙이 (억음 악센트)는 이스케이프 문자의 역할을하지만 문자 그대로 취급되기 때문에 $MyString의 출력에도 나타납니다.

출력을 방해하지 않는 단일 인용 여기 문자열 내에서 단일 인용 여기에 문자열을 탈출 올바른 방법이 있습니까?

NB : 나는 외부 여기 문자열의 내용을 동적으로 채워지고, 내용이 명령 행 인수로 PowerShell 스크립트로 다른 프로그램에 의해 제공됩니다 언급해야

. 이것은 매우 구체적이고 다소 틈새 구현 된 질문을 구름 짓고 싶지 않았기 때문에 샘플 코드에 반영되지 않았습니다.

외부 문자열이 내부 문자열을 포함 할 가능성은 거의 없으므로 (일어날 수 있음) 이러한 발생을 수용하기 위해 방어 프로그래밍이 필요하다고 생각합니다.

답변

1

사용 따옴표, 중 외부 여기 - 문자열 :

$MyString = @" 
hello 
@' 
'@ 
bye 
"@ 

또는 내부 여기 문자열에 대한

:

$MyString = @' 
hello 
@" 
"@ 
bye 
'@ 
+0

내 스크립트에 단일 인용 여기-고통을 사용 그것 때문에 HTML을 포함 할 수 있습니다. 큰 따옴표를 사용하면 javascript 함수 호출이 PowerShell 하위 표현식으로 잘못 해석되어 확장됩니다. – Fitzroy

+0

그런 다음 내부 here-string에 큰 따옴표를 사용하십시오. –

+0

제공된 입력을 제어 할 수 없습니다. 외부 프로세스가 powershell 스크립트를 호출하여 here-string의 내용을 인수로 제공합니다. – Fitzroy