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를 사용하고 있습니다.)
Benjamin이 말한 대로 다음을 수행할 수 있습니다.
$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
(사용 방법: 이스케이프 문자, 구분 기호 및 따옴표가 참조에 적합함).
사용할 수도 있습니다.-join
예.
$var = -join("Hello", " ", "world");
$var에 "Hello world"를 할당할 것입니다.
출력하려면 한 줄로:
Write-Host (-join("Hello", " ", "world"))
한 가지 방법은:
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
인쇄할 내용을 괄호로 묶습니다.
Write-Host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)
코드가 전달되는 많은 매개 변수로 해석되고 있습니다. 괄호 안에 코드를 묶으면 값이 연결되고 결과 값이 단일 매개 변수로 전달됩니다.
다른 옵션은 다음과 같습니다.
$string = $assoc.ID
$string += " - "
$string += $assoc.Name
$string += " - "
$string += $assoc.Owner
Write-Host $string
"최선의" 방법은 아마도 C.B.가 제안한 방법일 것입니다.
Write-Host "$($assoc.Id) - $($assoc.Name) - $($assoc.Owner)"
표현하는 동안:
"string1" + "string2" + "string3"
문자열을 연결합니다. PowerShell 명령으로 전달할 때 단일 인수로 평가되도록 하려면 괄호 앞에 $를 넣어야 합니다.예:
Write-Host $( "string1" + "string2" + "string3" )
추가적으로 여러 줄에 걸쳐 사용하려면 줄 끝에 어색한 백틱 구문을 사용해야 합니다(백틱 오른쪽에 공백이나 문자가 없음).
예:
Write-Host $(`
"The rain in " +`
"Spain falls mainly " +`
"in the plains" )`
-ForegroundColor Yellow
(사실 현재 PowerShell은 괄호 사이에 불필요한 백스틱을 요구하여 약간 잘못 구현되어 있다고 생각합니다.Microsoft가 시작 괄호와 끝 괄호 사이에 원하는 만큼 새 줄을 넣을 수 있도록 하는 Python 또는 Tcl 괄호 규칙을 따르면 줄 계속 및 문자열 연결과 관련된 PowerShell에 대해 사람들이 좋아하지 않는 대부분의 문제를 해결할 수 있습니다.
괄호 사이에 온라인 연속으로 백택스를 해제할 수 있다는 것을 알게 되었습니다. 하지만 그것이 효과가 있을지는 정말로 불안정하고 예측할 수 없습니다.백스틱만 추가하는 것이 좋습니다.)
식이 cmdlet에 대해 다른 매개 변수로 처리되지 않도록 하려면 식을 괄호 안에 넣어야 합니다.
Write-Host ($assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner)
(현재 PowerShell 버전 5.1.17134.407)
이 기능은 현재에도 작동합니다.
$myVar = "Hello"
echo "${myVar} World"
참고: 큰따옴표가 있는 경우에만 작동합니다.
대안으로 다음과 같은 방법이 있습니다.
Write-Host (" {0} - {1} - {2}" -f $assoc.Id, $assoc.Name, $assoc.Owner)
저는 단지 이것을 하기 위한 다른 방법을 가지고 싶습니다.NET 문자열.형식:
$name = "Slim Shady"
Write-Host ([string]::Format("My name is {0}", $name))
이 대답들은 모두 매우 복잡해 보입니다.PowerShell 스크립트에서 이 기능을 사용하는 경우 다음과 같이 간단히 수행할 수 있습니다.
$name = 'Slim Shady'
Write-Host 'My name is'$name
출력됩니다.
내 이름은 슬림 셰이디야.
단어 사이에 공백이 들어가는 방법을 메모합니다.
DOS 시절처럼 문자열을 연결합니다.이것은 로깅을 위한 큰 문제이므로 다음을 수행합니다.
$strDate = Get-Date
$strday = "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output "$($strDate.Year)$($strDate.Month)$($strDate.Day)"
Write-Output $strday
PowerShell을 사용할 때마다 이러한 문제(그리고 다른 많은 무의식적인 문제)로 어려움을 겪는 것 같아 이제 다음을 선택하게 되었습니다.
[string]::Concat("There are ", $count, " items in the list")
PowerShell에서 해야 할 일/하지 말아야 할 일: 1부:
$id = $assoc.Id
$name = $assoc.Name
$owner = $assoc.owner
"$id - $name - $owner"
쓰기 호스트는 다음과 같이 연결할 수 있습니다.
Write-Host $assoc.Id" - "$assoc.Name" - "$assoc.Owner
이게 가장 간단한 방법이야, 임호.
파일 경로를 만들기 위해 문자열을 연결하는 경우 Join-Path 명령을 사용합니다.
Join-Path C:\temp "MyNewFolder"
사용자에게 적합한 후행/선행 슬래시를 자동으로 추가하여 훨씬 쉽게 작업할 수 있습니다.
$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
다른 곳에서 언급한 바와 같이 조인을 사용할 수 있습니다.
명령을 입력으로 사용하는 경우(나와 마찬가지로) 다음 구문을 사용합니다.
-join($(Command1), "," , $(Command2))
그러면 두 출력이 쉼표로 구분됩니다.
관련 의견은 https://stackoverflow.com/a/34720515/11012871 을 참조하십시오.
개인적으로 저는 이런 스타일을 선호합니다.
[string]::Join(' - ', 42, 'Slim Shady', 'Eminem')
또는 속성 유형이 서로 다른 개체를 기반으로 합니다.
$assoc = [psCustomObject][ordered]@{
Id = 42
Name = 'Slim Shady'
Owner = 'Eminem'
}
[string]::Join(' - ',$assoc.psObject.Properties.value)
다음과 같은 결과를 얻을 수 있습니다.
42 - Slim Shady - Eminem
그냥 재미로.아래와 같이 PSO 개체의 값에 직접 액세스할 수도 있습니다.
$assoc.psobject.Properties.value -join " - "
그러나 개체의 순서를 지정하지 않으면 PowerShell은 값을 임의 순서로 표시합니다.그래서 당신은 깃발을 추가해야 합니다.[ordered]
:
$assoc = [pscustomobject] [ordered] @{
Id = 42
Name = "Slim Shady"
Owner = "Eminem"
}
또한 C#/에 액세스할 수 있습니다.NET 방법 및 다음 방법도 작동합니다.
$string1 = "Slim Shady, "
$string2 = "The real slim shady"
$concatString = [System.String]::Concat($string1, $string2)
Output:
Slim Shady, The real slim shady
언급URL : https://stackoverflow.com/questions/15113413/how-do-i-concatenate-strings-and-variables-in-powershell
'programing' 카테고리의 다른 글
Angular 2 서비스에서 관찰 가능한 항목 생성 및 반환 (0) | 2023.05.07 |
---|---|
그것을 해제하는 명령이 있습니까? (0) | 2023.05.07 |
에서 명명된 캡처 그룹에 액세스하려면 어떻게 해야 합니까?NET 정규식? (0) | 2023.05.07 |
컬렉션의 항목에 액세스합니다.인덱스별 정렬 딕트 (0) | 2023.05.07 |
배열 요소를 Bash에서 별도의 줄로 인쇄하시겠습니까? (0) | 2023.05.07 |