Bash의 && 및 || 연산자의 PowerShell 등가물은 무엇입니까?
Bash에서 나는 쉽게 다음과 같은 것을 할 수 있습니다.
command1 && command2 || command3
즉, command1을 실행하고 command1이 command2를 실행하는 데 성공하고 command1이 command3를 실행하지 못하는 경우입니다.
PowerShell의 동등한 기능은 무엇입니까?
업데이트: PowerShell(Core), 즉 v7+에서는 파이프라인 체인 운영자라고 합니다. 자세한 내용은 이 답변을 참조하십시오.
이 질문이 처음 제기된 지 여러 해가 지난 후, 최신 버전이자 최종 버전이 v5.1인 Windows PowerShell의 동작을 요약해 보겠습니다.
Bash의 / 및 제어 연산자에는 PowerShell에 해당되지 않으며 PowerShell에서 사용자 지정 연산자를 정의할 수 없으므로 다음과 같은 좋은 해결 방법이 없습니다.
별도의 명령어 사용(별도의 행 또는 다음으로 구분)
;), 자동 변수를 통해 각 명령의 성공 상태를 명시적으로 테스트합니다. 예:# Equivalent of && command1 -arg1 -arg2; if ($?) { command2 -arg1 } # Equivalent of || command1 -arg1 -arg2; if (-not $?) { command2 -arg1 }자동 변수를 사용하는 외부 프로그램에 대한 더 나은 대안. 이는 다음과 같은 이유로 선호됩니다.
$?윈도우즈 PowerShell에서 잘못된 음(더 이상 PowerShell(Core) 7.2+에서는 없음)이 발생할 수 있습니다.2>리디렉션이 포함되어 있습니다. 다음 답변을 참조하십시오.# Equivalent of && command1 -arg1 -arg2; if ($LASTEXITCODE -eq 0) { command2 -arg1 } # Equivalent of || command1 -arg1 -arg2; if ($LASTEXITCODE -ne 0) { command2 -arg1 }PowerShell의 PowerShell을 사용하는 하십시오.
-and그리고.-or일반적으로 해결책이 아닙니다.
[PowerShell(Core) 7+에 구현된 이후] 얼마 전에 추가에 대한 논의가 있었지만, 목록의 상위권에 오르지는 못한 것 같습니다.
PowerShell의을 선택해야 -and그리고.-or 할 수는 없습니다.&&그리고.||:
Bash의 통제 연산자&&AND) 및 (단락 논리 AND) »||(단락 논리 OR) 출력 스트림을 방해하지 않고 종료 코드를 기준으로 명령의 성공 상태를 암시적으로 확인합니다. 예:
ls / nosuchfile && echo 'ok'
신경쓰지 말아요.lsoutput (에 있는 -- 둘 stdout 출력의파다일의(출력)d파일▁outputs)/및 출력하지 않는 파일에 할 때 ) stderr 및출 재하 하려고 스생발때하는할세에류오지메시일지액는파않exist▁)존▁st▁(der▁and력출()는the메하▁from류생시▁outputnosuchfile) -- 통과되지만,&&의 (잘못된) 종료 코드를 확인합니다.ls명령어를 사용하여 다음을 결정합니다.echo-명 - 의 &&제어 연산자 - 실행해야 합니다.
ls 코드 포트종코드1이 경우, 신호 실패 -- 파일 때문입니다.nosuchfile존재하지 않습니다 -- 그래서.&&는 으로 결정합니다.ls 실패하고, 단락 편집을 적용함으로써, 다음과 같이 결정합니다.echo명령을 실행할 필요가 없습니다.
종료 코드임을 유의하십시오.0의 세계에서 성공을 알리는.cmd.exe그리고.bash0이 아닌 종료 코드는 실패를 나타냅니다.
즉, Bash 및 는 명령의 출력과 완전히 독립적으로 작동하며 명령의 성공 상태에만 영향을 미칩니다.
이와 대조적으로 PowerShell 및 는 명령의 표준(성공) 출력에만 작용하여 이를 소비한 다음 작업의 부울 결과만 출력합니다.
(Get-ChildItem \, nosuchfile) -and 'ok'
위 내용:
성공(표준) 출력을 사용하고 소비합니다. 목록
\그리고 이를 부울로 해석합니다. 비어 있지 않은 입력 컬렉션으로 간주됩니다.$true이상의, 표현식은 부컨텍에, 서래만하항적있다, 면다목평니됩가같이울로 됩니다.$true.- 그러나 존재하지 않는 파일로 인한 오류 정보
nosuchfile오류가 별도의 스트림으로 전송되므로 를 통과합니다.
- 그러나 존재하지 않는 파일로 인한 오류 정보
점을 하면,
Get-ChildItem \, nosuchfile있지 않은 출력을 합니다. 한 값은 " 출반다않성환니"입니다. LHS는 다음 값으로 평가됩니다.$true,그렇게-andRHS도 합니다.'ok'그러나 다시, 출력을 소비하고 이를 부울로 해석하며, 비어 있지 않은 문자열로 평가하기도 합니다.$true.따서인, 전적결의 과 같습니다.
-and은 은현표입니다.$true(유일한 성공) 출력입니다.
순효과는 다음과 같습니다.
양측의 성공적인 결과물
-and식은 평가 중에 사용되므로 효과적으로 숨겨집니다.식의 유일한 (성공) 출력은 다음과 같은 부울 결과입니다.
$true(은 이경로우 (렌링함더로)함▁as)로 렌더링 됩니다.True종점에 있음).
Bash는 논리 연산자에 전달될 때 명령의 정수 종료 코드를 true 또는 false로 해석해야 합니다.PowerShell은 이 작업을 수행하지 않지만 명령을 래핑하고 동일한 동작을 생성하는 기능을 만들 수 있습니다.
> function Get-ExitBoolean($cmd) { & $cmd | Out-Null; $? }
($?는 마지막 종료 코드의 성공을 포함하는 부울입니다.)
지정된 두 개의 배치 파일:
#pass.cmd
exit
그리고.
#fail.cmd
exit /b 200
...동작을 테스트할 수 있습니다.
> if (Get-ExitBoolean .\pass.cmd) { write pass } else { write fail }
pass
> if (Get-ExitBoolean .\fail.cmd) { write pass } else { write fail }
fail
논리 연산자는 Bash에서와 동일한 방식으로 평가되어야 합니다.먼저 별칭을 설정합니다.
> Set-Alias geb Get-ExitBoolean
테스트:
> (geb .\pass.cmd) -and (geb .\fail.cmd)
False
> (geb .\fail.cmd) -and (geb .\pass.cmd)
False
> (geb .\pass.cmd) -and (geb .\pass.cmd)
True
> (geb .\pass.cmd) -or (geb .\fail.cmd)
True
[void]를 사용하여 부울 출력을 숨기고 부작용만 얻을 수 있는 이런 작업할 수 있습니다.이 경우 $a 또는 $b가 null이면 $c가 $result에 할당됩니다.할당은 표현식이 될 수 있습니다.
$a = ''
$b = ''
$c = 'hi'
[void](
($result = $a) -or
($result = $b) -or
($result = $c))
$result
산출량
hi
파워셸에서 && 메소드를 사용하는 대신 try catch finally 메소드를 사용할 수 있습니다.
try {hostname} catch {echo err} finally {ipconfig /all | findstr bios}
언급URL : https://stackoverflow.com/questions/2416662/what-are-the-powershell-equivalents-of-bashs-and-operators
'source' 카테고리의 다른 글
| MYSQL Stored Procedure에서 동적 문자열 목록 내에서 문자열을 검색하는 방법 (0) | 2023.09.05 |
|---|---|
| MySQL 동시성, 작동 방식 및 응용 프로그램에서 처리해야 합니까? (0) | 2023.09.05 |
| BIGINT 서명되지 않은 값이 범위를 벗어났습니다. My SQL (0) | 2023.09.05 |
| Sequelize bulkCreate()가 기본 키에 대한 NULL 값을 반환합니다. (0) | 2023.09.05 |
| XmlHttpRequest 개체를 재사용해야 하는 이유는 무엇입니까? (0) | 2023.09.05 |