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
'sourcecode' 카테고리의 다른 글
SQL에서 출력을 정수로 선택/캐스팅 (0) | 2023.10.20 |
---|---|
PowerShell에서 객체의 여러 항목을 합산하는 방법? (0) | 2023.10.20 |
아웃라인과 경계 CSS 속성의 차이점은 무엇입니까? (0) | 2023.10.15 |
D3 힘 레이아웃 그래프를 확대하는 방법이 있습니까? (0) | 2023.10.15 |
HTML5에서 target="_blank"를 사용해도 괜찮습니까? (0) | 2023.10.15 |