source

PowerShell 문자열 보간 구문

manysource 2023. 4. 10. 22:01

PowerShell 문자열 보간 구문

문자열에서 변수가 확장되었는지 확인하기 위해 항상 다음 구문을 사용했습니다.

"my string with a $($variable)"

최근에 다음과 같은 구문을 발견했습니다.

"my string with a ${variable}"

동등합니까?아무 차이점?

Marze의 유용한 답변을 보완하기 위해:

${...} (변수명을 에 포함){그리고.}변수 이름에 공백, 또는 등의 특수 문자포함되어 있는 경우 )는 반드시 필요합니다.

  • 특별하지 않다_그리고 - 놀랍고 문제있는 -?.
  • 주의::네임스페이스 변수 표기법 또는 스코프 지정자맥락에서 PowerShell 드라이브 참조를 종료하는 것으로 해석됩니다.{...}인클로저가 사용되고 있거나 필요한 경우(예:$env:USERNAME또는${env:USERNAME},env는 모든 환경변수를 나타내는 PowerShell 드라이브입니다.$script:foo또는${script:foo},script는 스크립트의 범위와 변수를 나타냅니다).

주의:

  • ${...}변수 이름을 모호하게 하기 위한 구문 - 확장 가능한 문자열에 독립 실행형 변수 참조를 초과하는 표현식 또는 명령을 포함하기 위해 필요한 하위 표현식 연산자인 것과 혼동해서는 안 됩니다."..."따라서 두 구문 형식은 서로 독립적이며 특정 상황에서 조합해야 할 수 있습니다."$var"/"${var}"잘 작동하지만"$var.someProperty"/"${var}.someProperty"필요 없음: 필요"$($var.someProperty)"/"$(${var}.someProperty)"

내부 문자열 확장(인터폴레이션) 컨텍스트에서"..."변수 이름 자체가 필요하지 않은 경우에도 를 사용해야 하는 이유는 다음과 같습니다.

변수 이름을 공백이 아닌 문자(특히 다음을 포함) 바로 뒤에 있는 문자에서 설명해야 하는 경우::

$foo = 'bar'  # example variable

# INCORRECT: PowerShell assumes that the variable name is 'foobarian', not 'foo'
PS> "A $foobarian."
A .  # Variable $foobarian doesn't exist -> reference expanded to empty string.

# CORRECT: Use {...} to delineate the variable name:
PS> "A ${foo}barian."
A barbarian.

# INCORRECT: PowerShell assumes that 'foo:' is a *namespace* (drive) reference
#            (such as 'env:' in $env:PATH) and FAILS:
PS> "$foo: bar"
Variable reference is not valid. ':' was not followed by a valid variable name character. 
Consider using ${} to delimit the name.

# CORRECT: Use {...} to delineate the variable name:
PS> "${foo}: bar"
bar: bar

PowerShell 문자열 확장 규칙에 대한 포괄적인 개요는 이 답변을 참조하십시오.

따옴표로 둘러싸지 않은 인수를 명령어에 전달하는 컨텍스트에서 문자열 확장을 암묵적으로 적용하는 경우에도 다음과 같은 기술이 필요합니다.

# INCORRECT: The argument is treated as if it were enclosed in "...",
#            so the same rules apply.
Write-Output $foo:/bar

# CORRECT
Write-Output ${foo}:/bar

마지막으로, 다소 불명확한 대안은 다음과 같습니다.`변수 이름 뒤에 첫 번째 문자가 표시되지만 문제는 이스케이프 시퀀스에 포함되지 않은 문자( 참조):

# OK: because `: is not an escape sequence.
PS> "$foo`: bar"
bar: bar

# NOT OK, because `b is the escape sequence for a backspace character.
PS> "$foo`bar"
baar # The `b "ate" the trailing 'r' of the variable value
     # and only "ar" was the literal part.

${variable}특수문자를 포함한 변수 이름의 구문입니다.

(특수문자를 포함한 변수 이름 참조)

예:

${var with spaces} = "value"
"var with spaces: ${var with spaces}"

여러분 쓰세요.$variable

:$()오브젝트에 이 됩니다.json 오브젝트에는 도움이 됩니다.

"My json property is $($jsonObj.property)"

언급URL : https://stackoverflow.com/questions/60323111/powershell-string-interpolation-syntax