sourcecode

PowerShell에서 점(.)과 앰퍼샌드(&)의 차이점은 무엇입니까?

codebag 2023. 10. 15. 17:18
반응형

PowerShell에서 점(.)과 앰퍼샌드(&)의 차이점은 무엇입니까?

PowerShell에서 dot을 사용하는 것의 차이점(.) 및 앰퍼샌드(&) cmdlet, 기능, 스크립트 파일 또는 조작 가능한 프로그램을 호출할 때?

예를 들어,

. foo.sh1
& foo.sh1

이와 유사한 질문이 있는데, 이 질문은 중복된 것으로 잘못 닫혔습니다.PowerShell 스크립트 블록을 호출하는 동안 ampersand (&)와 dot (.)의 차이점.질문도 다르고 키워드와 검색 순위도 완전히 다릅니다.PowerShell 파이프라인에서 'gacebook' 축약어는 무엇을 의미합니까?질문의 반만 대답합니다.

  • 와 연산자의 차이점은 PowerShell 스크립트 또는 함수(또는 별칭)를 호출할 때에만 중요합니다. cmdlet외부 프로그램의 경우 동일하게 작동합니다.

  • 스크립트 및 함수의 경우 함수, 별칭 변수 범위 지정과 관련하여 다릅니다.

    • &,&호출 오퍼레이터는 스크립트와 함수를 자식 범위에서 실행하며, 이는 전형적사용 사례입니다. 함수와 스크립트는 일반적으로 부작용 없이 실행될 것으로 예상됩니다.

      • 호출된 스크립트/함수에 정의된 변수, (네스트된) 함수, 별칭은 호출에 로컬이며 스크립트가 종료/함수가 반환되면 범위를 벗어납니다.

      • 그러나 하위 범위에서 실행되는 스크립트라도 명시적인 작업에 의해 다음과 같은 호출자의 환경에 영향을 미칠 수 있습니다.Set-Location현재 위치를 변경하려면 부모 범위를 명시적으로 수정합니다(Set-Variable -Scope 1 ...) 또는 전역 범위($global:...또는 프로세스 수준 환경 변수를 정의합니다.

    • ., sour연산자현재 범위에서 스크립트와 함수를 실행하며 일반적으로 함수, 별칭 나중에 사용 변수를 추가하여 호출자 범위를 수정하는 데 사용됩니다.예를 들어, 이 메커니즘은 다음을 로드하기 위해 사용됩니다.$PROFILE대화형 세션을 초기화하는 파일입니다.

주의할 점은 (스크립트와 달리) 함수의 경우 하위현재의 참조 범위가 반드시 호출자의 범위일 필요는 없다는 것입니다. 함수가 모듈에 정의된 경우 참조 범위는 해당 모듈의 범위 도메인입니다.

  • : 입니다를 ..수정되는 범위가 모듈의 것이기 때문에 모듈에서 유래된 함수를 사용하는 것은 사실상 수정되는 범위가 모듈의 것이기 때문입니다.
  • 즉, 모듈에 정의된 기능은 대개 도트 소싱을 염두에 두고 설계되지 않습니다.

또한 Windows Powershell in Action의 노트에서 호출 운영자와 함께 모듈 범위 내에서 작업을 실행할 수도 있습니다.

# get and variable in module scope
$m = get-module counter
& $m Get-Variable count
& $m Set-Variable count 33

# see func def
& $m Get-Item function:Get-Count

# redefine func in memory
& $m {
  function script:Get-Count
  {
    return $script:count += $increment * 2
  }
}

# get original func def on disk
Import-Module .\counter.psm1 -Force

그 외 몇 가지 사항:

# run with commandinfo object
$d = get-command get-date
& $d

# call anonymous function
& {param($x,$y) $x+$y} 2 5

# same with dot operator
. {param($x,$y) $x+$y} 2 5

마티아스가 이 스레드에서 댓글로 언급한 것처럼.&됩니다 이 무엇이든 하는 데 됩니다.&그리고..는 현재 범위에서 호출하는 데 사용되며 일반적으로 호출자 범위에서 사용할 수 있도록 함수가 포함된 도우미 파일을 닷 소스하는 데 사용됩니다.

  • 더 많은 dot sourcing에 대해서는 https://mcpmag.com/articles/2017/02/02/exploring-dot-sourcing-in-powershell.aspx 를 참조하십시오.

분리하고 명확한 이해를 하기 위해 시나리오를 설명하는 것입니다.오라는 있다고 해 보세요.MyFunction일순간에source.ps1. 그리고 다른 스크립트(MyCustomScript.ps1)에서 해당 기능을 사용하고자 합니다.

아래와 같이 MyCustomScript.ps1에 줄을 넣으면 사용이 가능합니다.

. path\of\the\source.ps1 

MyFunction

사용자 지정 스크립트에서 source.ps1에 있는 함수를 사용하는 것입니다.에.&할 수 있도록 의 콜 입니다. 당신이 외부 실행 파일을 호출하는 것을 도와줄 것입니다.psexec그 밖의 사람들.

직접 또는 통화 조작자와 함께 명령을 호출하면 하위 범위라는 다른 범위가 생성되며 명령이 실행되면 사라집니다.명령이 전역 변수의 값을 변경하는 경우 스코프가 종료될 때 변경 내용이 손실됩니다.

하기 위해 수 .dot현재 범위에서 항상 스크립트를 실행하는 스크립트입니다.

소싱은 및 또는 합니다()&함수 또는 스크립트를 평소와 같이 실행하지만 현재 범위에 추가되지는 않습니다.

이것이 언제 무엇을 사용해야 하는지에 대한 아이디어를 주기를 바랍니다.

언급URL : https://stackoverflow.com/questions/54661916/what-is-the-difference-between-dot-and-ampersand-in-powershell

반응형