PowerShell에서 문자열이 null인지 빈지 확인하는 방법은 무엇입니까?
★★★★★★★★★★★★★★★★★★★★★?IsNullOrEmpty
PowerShell 서인인 인인null 인 power power power power power power?
아직 찾을 수 없고, 내장 방법이 있다면 이 함수는 쓰고 싶지 않습니다.
너무 힘들게 하는 거 아니야?PowerShell은 이를 매우 우아하게 처리합니다. 예:
> $str1 = $null
> if ($str1) { 'not empty' } else { 'empty' }
empty
> $str2 = ''
> if ($str2) { 'not empty' } else { 'empty' }
empty
> $str3 = ' '
> if ($str3) { 'not empty' } else { 'empty' }
not empty
> $str4 = 'asdf'
> if ($str4) { 'not empty' } else { 'empty' }
not empty
> if ($str1 -and $str2) { 'neither empty' } else { 'one or both empty' }
one or both empty
> if ($str3 -and $str4) { 'neither empty' } else { 'one or both empty' }
neither empty
.IsNullOrEmpty
다음 중 하나:
[string]::IsNullOrEmpty(...)
★★★★★★★★★★★★★★★★ [string]::IsNullOrEmpty
빈 을 부울에 할 수 있습니다.
$string = $null
[bool]$string
if (!$string) { "string is null or empty" }
$string = ''
[bool]$string
if (!$string) { "string is null or empty" }
$string = 'something'
[bool]$string
if ($string) { "string is not null or empty" }
출력:
False
string is null or empty
False
string is null or empty
True
string is not null or empty
할 수 .ValidateNotNullOrEmpty
에서 알 수 : " " " 입니다.
Function Test-Something
{
Param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$UserName
)
#stuff todo
}
개인적으로는 공백($STR3)이 비어 있지 않은 것으로 간주하지 않습니다.
공백만 포함하는 변수가 파라미터에 전달되면 파라미터 값이 "$null"이 아닐 수 있다는 오류가 자주 발생합니다. 공백이 아닐 수 있다고 말하는 대신 일부 제거 명령은 하위 폴더 이름이 "공백"인 경우 하위 폴더 대신 루트 폴더를 제거할 수 있습니다.대부분의 경우 공백이 포함된 문자열을 받아들이지 않는 모든 이유.
나는 이것을 실현하는 가장 좋은 방법이라고 생각한다.
$STR1 = $null
IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}
빈
$STR2 = ""
IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}
빈
$STR3 = " "
IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}
비었어!! :-)
$STR4 = "Nico"
IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}
비어 있지 않다
2.0을 2.0:[string]::IsNullOrWhiteSpace()
string -notmatch "\S"
("\S" = 공백이 아닌 임의의 문자)
> $null -notmatch "\S"
True
> " " -notmatch "\S"
True
> " x " -notmatch "\S"
False
퍼포먼스는 매우 우수합니다.
> Measure-Command {1..1000000 |% {[string]::IsNullOrWhiteSpace(" ")}}
TotalMilliseconds : 3641.2089
> Measure-Command {1..1000000 |% {" " -notmatch "\S"}}
TotalMilliseconds : 4040.8453
컴퓨터에서 실행해야 하는 PowerShell 스크립트가 있어 [String]이(가): Is NullOrWhiteSpace ( )그래서 제가 직접 썼어요.
function IsNullOrWhitespace($str)
{
if ($str)
{
return ($str -replace " ","" -replace "`t","").Length -eq 0
}
else
{
return $TRUE
}
}
여기에서는 적절한 답변이 많이 제시되어 있습니다.PowerShell 자동 솔루션을 사용한 실용적인 개요를 제시하겠습니다.
" " " 가 지정됨$str
포함시킬 수 있습니다.$null
또는 문자열(또는 스칼라):
# Test for $null or '' (empty string).
# Equivalent of: [string]::IsNullOrEmpty($str)
$str -like ''
# Test for $null or '' or all-whitespace.
# Equivalent of: [string]::IsNullOrWhitespace($str)
$str -notmatch '\S'
string-only 연산자를 사용하면 LHS가 스트링에 암묵적으로 강제됩니다.
[string] $null
다 빈합니다.'' -like ''
★★★★★★★★★★★★★★★★★」$null -like ''
$true
.마찬가지로 regex 기반 / 연산자는 문자열 전용 연산자로서 LHS 피연산자를 문자열로 강제합니다.
$null
을 받다''
변の변\S
는 공백 이외의 임의의 문자와 일치하는 정규식 이스케이프 시퀀스입니다(이 형식은\s
를 참조해 주세요.-match
-notmatch
디폴트로 서브스트링 조회를 실행(및 일치하는 것은1개만 반환)하기 때문에,\S
합니다.
경고:
PowerShell의 동적 입력으로 인해 지정된 변수에 저장된 값의 유형을 미리 알지 못할 수 있습니다.
은 '할 수 있는 이지만,$null
,[string]
인스턴스 및 기타 타입은 열거할 수 없고 열거할 수 없는 값(문자열 제외)이 놀라운 결과를 얻을 수치의 LHS가-like
★★★★★★★★★★★★★★★★★」-notmatch
are enumerable(간단히 말하면 collections)은 각 요소에 적용되며 단일 부울 값을 반환하는 대신 일치하는 요소의 서브 배열이 반환됩니다.
조건의 맥락에서 배열이 부울로 강제되는 방법은 다소 반직관적입니다. 배열에 요소가 하나만 있는 경우 해당 요소 자체가 부울로 강제됩니다. 두 개 이상의 요소가 있는 경우 배열은 항상 부울로 강제됩니다.$true
요소 값에 관계없이 이 답변의 아래쪽 섹션을 참조하십시오.예:
# -> 'why?', because @('', '') -like '' yields @('', ''), which
# - due to being a 2-element array - is $true
$var = @('', '')
if ($var -like '') { 'why?' }
문자열이 아닌 열거형 LHS를 에 캐스팅하면 PowerShell은 해당(문자열화된) 요소를 공백으로 연결하여 문자열화합니다.이 또한 당신이 전화했을 때 암묵적으로 일어나는 일입니다.[string]::IsNullOrEmpty()
★★★★★★★★★★★★★★★★★」[string]::IsNullOrWhiteSpace()
이기 [string]
--. - - -
따라서 전술한 스트링화 규칙을 사용하여 위의 유형에 구애받지 않는 등가물은 다음과 같습니다.
# Test for $null or '' (empty string) or any stringified value being ''
# Equivalent of: [string]::IsNullOrEmpty($var)
[string] $var -like ''
# Test for $null or '' or all-whitespace or any stringified value being ''
# Equivalent of: [string]::IsNullOrWhitespace($var)
[string] $var -notmatch '\S'
# cases
$x = null
$x = ''
$x = ' '
# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}
순수한 PowerShell 방식으로 이를 실현하는 또 다른 방법은 다음과 같습니다.
("" -eq ("{0}" -f $val).Trim())
이 값은 null, 빈 문자열 및 공백에 대해 정상적으로 평가됩니다.전달된 값의 형식을 빈 문자열로 지정하여 null을 처리하고 있습니다(그렇지 않으면 trim을 호출할 때 null로 인해 오류가 발생합니다).그럼 그냥 빈 문자열로 평등을 평가하세요.난 여전히 Is Nullor가 더 좋은 것 같아WhiteSpace, 하지만 다른 방법을 찾고 있다면 이 방법을 사용할 수 있습니다.
$val = null
("" -eq ("{0}" -f $val).Trim())
>True
$val = " "
("" -eq ("{0}" -f $val).Trim())
>True
$val = ""
("" -eq ("{0}" -f $val).Trim())
>True
$val = "not null or empty or whitespace"
("" -eq ("{0}" -f $val).Trim())
>False
심심해서 이걸 가지고 놀다가 좀 더 짧게 했어요(비록 더 알 수 없지만).
!!(("$val").Trim())
또는
!(("$val").Trim())
네가 뭘 하려고 하는가에 따라.
@Keith와의 접선 결점 해결Hill의 답변은 이 문제를 다루지 않습니다.PowerShell 7.1 이후에서는 늘 조건의 멤버 연산자를 사용하여 문자열이 늘인지 공백인지를 먼저 확인할 필요 없이 정상적으로 확인할 수 있습니다.$null
)의 을 [string]::IsNullOrWhitespace(string)
.
주의: PowerShell 7.0에서도 이 작업을 수행할 수 있습니다.
PSNullConditionalOperators
험험: :Enable-ExperimentalFeature -Name PSNullConditionalOperators
「 」를 $str3
Keith의 답변에서 예제를 참조하십시오(명확성을 위해 7.0 이후로는 3진 연산자가 존재하지 않는 것처럼 가장함).
$str3 = ' '
if ( ${str3}?.Trim() ) {
'not empty or whitespace'
} else {
'empty or whitespace'
}
empty or whitespace
.Trim()
호출되는 것은, 「」의 경우 입니다.$str3
않으면 '비표준값'입니다.그렇지 않으면$null
대신 반환됩니다.
은 물음표입니다.?
는 변수 이름의 일부로 유효합니다.따라서 다음과 같이 조건부 액세스 연산자를 적용하기 전에 먼저 변수 이름을 명확히 해야 합니다.${str3}
앞에서 삼진 연산자에 대해 언급했으므로 이 답변은 이미 PowerShell 7.1 이후를 중심으로 하고 있으므로 삼진 연산자를 사용하여 위의 코드 블록을 단순화할 수 있습니다.보일러 플레이트를 제거합니다.if/then/else
「 」 「 」 :
${str3}?.Trim() ? 'not empty or whitespace' : 'empty or whitespace'
3진 연산자는 단순화된 연산자입니다.if/then/else
기본 조건의 문.미묘한 뉘앙스로 이 상황을 너무 혼란스럽게 만들고 싶지는 않지만, "만약 외로운 물음표의 왼쪽이?
한다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?
콜론 것을 :
3진 연산자에 대한 자세한 내용은 PowerShell 설명서를 참조하십시오.
, 하다, 하다, 하다, 하다, 할 수 요.IsNullOrWhitespace()
★★★★★★★★★★★★★★★★★」isNullOrEmpty()
공백 또는 늘 값을 테스트하는 정적 메서드입니다.를 들어, 에 에, 에 삽입해 주세요.MySQL
입력할 값을 루프하고 null 또는 공백 값을 피하기 위해 조건을 사용합니다.
// RowData is iterative, in this case a hashtable,
// $_.values targets the values of the hashtable
```PowerShell
$rowData | ForEach-Object {
if(-not [string]::IsNullOrEmpty($_.values) -and
-not [string]::IsNullOrWhiteSpace($_.values)) {
// Insert logic here to use non-null/whitespace values
}
}
또 다른 방법으로는 다음을 사용하여 인스턴스에 2개의 새로운 스크립트 메서드를 추가합니다.
Update-TypeData -MemberType ScriptMethod -MemberName IsNullOrEmpty -Value {
return [string]::IsNullOrEmpty($this)
} -TypeName System.String
Update-TypeData -MemberType ScriptMethod -MemberName IsNullOrWhiteSpace -Value {
return [string]::IsNullOrWhiteSpace($this)
} -TypeName System.String
'hello'.IsNullOrEmpty() # => False
''.IsNullOrEmpty() # => True
' '.IsNullOrEmpty() # => False
' '.IsNullOrWhiteSpace() # => True
빈 문자열을 null로 변환하는 필터를 작성할 수 있습니다.이 경우 null만 체크하면 됩니다.
filter nullif {@($_, $null)[$_ -eq '']}
그럼 네 가치를 거기에 담기만 하면 돼
('' | nullif) -eq $null
> True
('x' | nullif) -eq $null
> False
더 쉬운 mrthod는 정규식을 사용하는 것입니다.
$null -match '^$'
> True
'' -match '^$'
> True
'x' -match '^$'
> False
Keith Hill의 답변 확장(공백 설명):
$str = " "
if ($str -and $version.Trim()) { Write-Host "Not Empty" } else { Write-Host "Empty" }
공백이 있는 null, 빈 문자열 및 문자열의 경우 "Empty"를 반환하고 다른 모든 문자열의 경우 "Not Empty"를 반환합니다.
언급URL : https://stackoverflow.com/questions/13738634/how-can-i-check-if-a-string-is-null-or-empty-in-powershell
'programing' 카테고리의 다른 글
Join-Path를 사용하여 3개 이상의 문자열을 하나의 파일 경로에 결합하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
---|---|
링크와 같은 기능을 하는HTML 버튼을 작성하려면 어떻게 해야 하나요? (0) | 2023.04.08 |
중복 행을 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
어떻게 하면 내용물보다 큰 div를 만들 수 있나요? (0) | 2023.04.08 |
SQL Server:동시에 두 개의 테이블에 삽입할 수 있습니까? (0) | 2023.04.08 |