PowerShell에서 문자열과 변수를 어떻게 연결합니까?
다음 스 니펫이 있다고 가정하십시오.
$assoc = New-Object psobject -Property @{
Id = 42
Name = "Slim Shady"
Owner = "Eminem"
}
Write-host $assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner
이 스 니펫이 다음과 같이 표시 될 것으로 예상됩니다.
42 - Slim Shady - Eminem
그러나 대신 다음과 같이 표시됩니다.
42 + - + Slim Shady + - + Eminem
+
연산자가 문자열과 변수를 연결하는 데 적합하지 않다고 생각합니다 .
PowerShell을 사용하여 어떻게 접근해야합니까?
Write-Host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"
참고 항목 의 Windows PowerShell 언어 사양 버전 3.0 , P34, 하위 식 확장을.
작은 따옴표와 큰 따옴표의 차이점을 언급 한 사람은 없습니다. (PowerShell 4를 사용하고 있습니다).
@Ben이 말했듯 이이 작업을 수행 할 수 있습니다.
$name = 'Slim Shady'
Write-Host 'My name is'$name
-> My name is Slim Shady
또는 당신은 이것을 할 수 있습니다 :
$name = 'Slim Shady'
Write-Host "My name is $name"
-> My name is Slim Shady
작은 따옴표는 리터럴을위한 것이므로 문자열을 이와 같이 정확하게 출력하십시오. 큰 따옴표는 변수, 특수 문자 등의 일부 전처리를 원할 때 사용됩니다.
그래서:
$name = "Marshall Bruce Mathers III"
Write-Host "$name"
-> Marshall Bruce Mathers III
이므로:
$name = "Marshall Bruce Mathers III"
Write-Host '$name'
-> $name
( http://ss64.com/ps/syntax-esc.html 참조하기에 좋습니다).
한 가지 방법은 다음과 같습니다.
Write-host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"
다른 하나는 다음과 같습니다.
Write-host ("{0} - {1} - {2}" -f $assoc.Id,$assoc.Name,$assoc.Owner )
또는 그냥 (그러나 나는 그것을 좋아하지 않습니다)) :
Write-host $assoc.Id " - " $assoc.Name " - " $assoc.Owner
당신은 또한 사용할 수 있습니다 -join
예 :
$name = -join("Jo", "h", "n");
"John"을 $ name에 할당합니다.
따라서 한 줄로 출력하려면 다음을 수행하십시오.
Write-Host (-join("Jo", "h", "n"))
인쇄하고자하는 것을 괄호로 묶어보십시오.
Write-host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)
귀하의 코드는에 전달되는 많은 매개 변수로 해석됩니다 Write-Host
. 괄호 안에 묶으면 값이 연결되고 결과 값이 단일 매개 변수로 전달됩니다.
다른 옵션은 다음과 같습니다.
$string = $assoc.ID
$string += " - "
$string += $assoc.Name
$string += " - "
$string += $assoc.Owner
Write-Host $string
"최상의"방법은 아마도 CB가 제안한 방법 일 것입니다.
Write-host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"
cmdlet에 다른 매개 변수로 처리되지 않도록 식을 괄호 안에 넣어야합니다.
Write-host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)
표현하는 동안 :
"string1" + "string2" + "string3"
문자열을 연결합니다. powershell 명령에 전달 될 때 단일 인수로 평가되도록하려면 괄호 앞에 $를 넣어야합니다. 예:
Write-Host $( "string1" + "string2" + "string3" )
보너스로 여러 줄에 걸쳐서 표시하려면 줄 끝에서 ackward backtick 구문을 사용해야합니다 (백틱 오른쪽에 공백이나 문자가없는 상태). 예:
Write-Host $(`
"The rain in " +`
"Spain falls mainly " +`
"in the plains" )`
-ForegroundColor Yellow
(실제로 Powershell은 현재 괄호 사이에 불필요한 백 틱이 필요하기 때문에 약간 잘못 구현되었다고 생각합니다. Microsoft가 "Python"또는 "TCL"괄호 규칙을 따르면 시작과 시작 사이에 원하는만큼 줄 바꿈을 할 수 있습니다. 괄호를 끝내면 줄 연속 및 문자열 연결과 관련된 powershell에 대해 사람들이 좋아하지 않는 대부분의 문제를 해결할 수 있습니다. 나는 괄호 사이의 줄 연속에서 백 틱을 끌 수 있다는 것을 알았습니다. 효과가있을 경우 실로 허약하고 실행할 수없는 경우입니다. 백틱을 추가하는 것이 좋습니다.)
대안으로 다른 방법이 있습니다.
Write-host (" {0} - {1} - {2}" -f $assoc.Id, $assoc.Name, $assoc.Owner)
.NET String.Format을 사용 하여이 작업을 수행하는 다른 방법을 원합니다 .
$name = "Slim Shady"
Write-Host ([string]::Format("My name is {0}", $name))
에서 무엇을 어떻게 없음 / PowerShell의해야 할 일 : 제 1 부 :
$id = $assoc.Id
$name = $assoc.Name
$owner = $assoc.owner
"$id - $name - $owner"
이 답변은 모두 매우 복잡해 보입니다. PowerShell 스크립트에서 이것을 사용하는 경우 간단히 다음을 수행 할 수 있습니다.
$name = 'Slim Shady'
Write-Host 'My name is'$name
출력됩니다
제 이름은 Slim Shady입니다
당신을 위해 단어 사이에 공백이 어떻게 있는지 확인하십시오.
DOS 시절과 마찬가지로 문자열을 연결하십시오. 이것은 로깅에 큰 문제이므로 여기로 이동하십시오.
$strDate = Get-Date
$strday = "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output $strday
PowerShell을 사용하지 않을 때마다 PowerShell을 사용할 때 마다이 (및 기타 직관적이지 않은 것들)로 어려움을 겪고 있으므로 이제 다음을 선택하십시오.
[string]::Concat("There are ", $count, " items in the list")
(현재 PS 버전 5.1.17134.407)
그것은 모두 지금까지 말하고 완료했다고 생각하지만 이것은 현재 작동합니다.
$myVar = "Hello"
echo "${myVar} World"
Write-Host 는 다음과 같이 연결할 수도 있습니다.
Write-Host $assoc.Id" - "$assoc.Name" - "$assoc.Owner
이것이 가장 간단한 방법입니다 (IMHO).
$assoc = @{
Id = 34
FirstName = "John"
LastName = "Doe"
Owner = "Wife"
}
$assocId = $assoc.Id
$assocFN = $assoc.FirstName
$assocLN = $assoc.LastName
$assocName = $assocFN, $assocLN -Join " "
$assocOwner = $assoc.Owner
$assocJoin = $assocId, $assocName, $assocOwner -join " - "
$assocJoin
#Output = 34 - John Doe - Wife
재미 로요 아래와 같이 PSObject의 값에 직접 액세스 할 수도 있습니다.
$assoc.psobject.Properties.value -join " - "
그러나 객체를 주문하도록 지정하지 않으면 Powershell은 임의의 순서로 값을 표시합니다. 따라서 [순서] 플래그를 추가해야합니다
$assoc = [pscustomobject] [ordered] @{
Id = 42
Name = "Slim Shady"
Owner = "Eminem"
}
이 시도:
$name = "Slim Shady"
Write-Host "My name is " $name
'Programming' 카테고리의 다른 글
cURL이 진행률 표시 줄을 표시하지 않게하려면 어떻게합니까? (0) | 2020.02.11 |
---|---|
node.js에서 한 번에 한 줄씩 파일을 읽습니까? (0) | 2020.02.11 |
argparse를 사용하여 부울 값 구문 분석 (0) | 2020.02.11 |
Git의 사인 오프 기능은 무엇입니까? (0) | 2020.02.11 |
require ()와 library ()의 차이점은 무엇입니까? (0) | 2020.02.11 |