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
'source' 카테고리의 다른 글
NSInvocation for Dummies? (0) | 2023.04.10 |
---|---|
"'NSString *' 유형의 매개 변수로 'constant NSString *'을(를) 전송하면 한정자가 삭제됩니다." 경고 (0) | 2023.04.10 |
쿼리에서 SQL 데이터 유형을 반환하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
치명적: 미입력 서브모듈 내 (0) | 2023.04.05 |
카테고리가 있는 모든 WordPress 게시물을 추출하기 위한 SQL 쿼리 (0) | 2023.04.05 |