programing

따옴표와 큰 따옴표 이스케이프

nasanasas 2020. 10. 12. 07:37
반응형

따옴표와 큰 따옴표 이스케이프


-param다음 명령 줄에서 값 의 따옴표를 올바르게 이스케이프하려면 어떻게해야 합니까?

$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd 

물론 이것은 실패합니다. 이스케이프 문자`를 사용하여 따옴표 (싱글 및 더블)를 이스케이프하려고 시도하고 다양한 조합을 수행했지만 아무것도 작동하지 않습니다.


이와 같은 이스케이프 매개 변수는 일반적으로 좌절감을 느끼며 시간 낭비처럼 느껴집니다. v2를 사용하는 것으로 보이므로 Joel "Jaykul"Bennet 이 얼마 전에 블로그에 올린 기술을 사용하는 것이 좋습니다 .

간단히 말해서, 문자열을 @ '...'@로 감싸기 만하면됩니다.

Start-Process \\server\toto.exe @'
-batch=B -param="sort1;parmtxt='Security ID=1234'"
'@

( 어떤 따옴표가 필요한지, 그리고 어떤 것을 이스케이프하려고하는지 가정 했다는 점을 염두에 두십시오.) 출력 작업을하고 싶다면 -NoNewWindow스위치 를 추가 할 수 있습니다 .

BTW : 이것은 매우 중요한 문제 였기 때문에 v3 이후로 --%PowerShell 파서가 매개 변수로 어떤 작업을 수행하지 못하도록 할 수 있습니다 .

\\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"

... (동일한 가정으로) 잘 작동합니다.


백틱 (`)을 사용하면 다음 위치에 넣으면 잘 작동합니다.

$cmd="\\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""

$cmd 다음과 같이 반환됩니다.

\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"

그게 당신이 찾고 있던 것입니까?

PowerShell이 ​​제공 한 오류는 예기치 않은 토큰 'sort1'을 참조했으며, 이것이 제가 백틱을 넣을 위치를 결정한 방법입니다.

@ '...'@ 구문은 "여기 문자열"이라고하며 입력 한 내용을 정확하게 반환합니다. 이를 사용하여 다음과 같은 방식으로 변수를 채울 수도 있습니다.

$cmd=@'
"\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
'@

여는 기호와 닫는 기호는 위에 표시된대로 자체 줄에 있어야합니다.


나는 오늘 Node.js 모듈을 통해 명령을 실행하는 동안 비슷한 곤경에 처해 있음을 발견했습니다.

PowerShell을 사용하고 실행하려고했습니다.

command -e 'func($a)'

그러나 추가 기호로 인해 PowerShell은 인수를 조작했습니다. 수정하기 위해 이스케이프 된 큰 따옴표를 역틱으로 표시합니다.

command -e `"func($a)`"

참고 URL : https://stackoverflow.com/questions/18116186/escaping-quotes-and-double-quotes

반응형