Programming

PowerShell에서 문자열과 변수를 어떻게 연결합니까?

procodes 2020. 2. 11. 22:45
반응형

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

참고 URL : https://stackoverflow.com/questions/15113413/how-do-i-concatenate-strings-and-variables-in-powershell



반응형