Czy IsNullOrEmpty
w programie PowerShell jest wbudowana funkcja podobna do sprawdzania, czy łańcuch jest pusty lub pusty?
Do tej pory nie mogłem go znaleźć, a jeśli istnieje wbudowany sposób, nie chcę do tego pisać funkcji.
.net
string
powershell
null
ołówek Ciasto
źródło
źródło
String.IsNullOrEmpty
?Odpowiedzi:
Możesz użyć
IsNullOrEmpty
metody statycznej:źródło
!
. Działa to tylko w nowszych wersjach programu PowerShell.!
jest pseudonimem-not
Robicie to zbyt ciężko. PowerShell obsługuje to dość elegancko, np .:
źródło
IsNullOrWhitespace()
tego scenariusza. Ale po 11 latach pisania skryptów w PowerShell bardzo rzadko potrzebuję tego testu ciągów . :-)Oprócz tego
[string]::IsNullOrEmpty
, aby sprawdzić, czy jest pusta lub pusta, możesz rzutować ciąg znaków na wartość logiczną jawnie lub w wyrażeniach logicznych:Wynik:
źródło
If
klauzula wewnętrznie konwertuje wszystko w nawiasie na pojedynczy logiczny, co oznacza, że wystarczy jawna konwersjaif($string){Things to do for non-empty-nor-null}
lubif(!$string){Things to do for empty-or-null}
bez[bool]
niej.Jeśli jest to parametr w funkcji, możesz go zweryfikować,
ValidateNotNullOrEmpty
jak widać w tym przykładzie:źródło
Osobiście nie akceptuję spacji ($ STR3) jako „niepusty”.
Gdy zmienna zawierająca tylko białe znaki jest przekazywana do parametru, często będzie błąd, że wartość parametru nie może być równa „$ null”, zamiast powiedzieć, że nie może to być biała spacja, niektóre polecenia usuwania mogą usunąć folder główny zamiast podfolder, jeśli nazwa podfolderu to „biała spacja”, powodem tego jest to, że w wielu przypadkach nie można zaakceptować ciągu zawierającego białe znaki.
Uważam, że jest to najlepszy sposób na osiągnięcie tego:
Pusty
Pusty
Pusty!! :-)
Nie pusty
źródło
Mam skrypt PowerShell, który muszę uruchamiać na komputerze tak nieaktualnym, że nie ma on [String] :: IsNullOrWhiteSpace (), więc napisałem własny.
źródło
źródło
Zamiennik PowerShell 2.0 dla
[string]::IsNullOrWhiteSpace()
isstring -notmatch "\S"
(„ \ S ” = dowolny znak inny niż biały)
Wydajność jest bardzo bliska:
źródło
Innym sposobem osiągnięcia tego w czysty sposób PowerShell byłoby zrobienie czegoś takiego:
Sprawdza to z powodzeniem dla pustego, pustego łańcucha i białych znaków. Formatuję przekazaną wartość do pustego ciągu, aby obsługiwał wartość NULL (w przeciwnym razie wartość NULL spowoduje błąd podczas wywoływania Trim). Następnie po prostu oceń równość pustym ciągiem. Myślę, że nadal wolę IsNullOrWhiteSpace, ale jeśli szukasz innego sposobu, to zadziała.
W przypływie nudy trochę się tym bawiłem i skróciłem (choć bardziej tajemniczo):
lub
w zależności od tego, co próbujesz zrobić.
źródło
Zauważ, że
"if ($str)"
i"IsNullOrEmpty"
testy nie działają porównywalnie we wszystkich przypadkach: cesja$str=0
produkuje fałszywe dla obu, i w zależności od zamierzonych semantyki programu, może to wydajność niespodziankę.źródło
Sprawdź długość. Jeśli obiekt istnieje, będzie miał długość.
Obiekty zerowe nie mają długości, nie istnieją i nie można ich sprawdzić.
Obiekt string ma długość.
Pytanie brzmiało: IsNull lub IsEmpty, NOT IsNull lub IsEmpty lub IsWhiteSpace
źródło
Null objects have no length
- próbowałeś wykonać$null.length
? :-) Dla szybkiego testu bool, pipowanie do Get-Member, a następnie konieczność obsługi wynikowego błędu w przypadku $ null wydaje mi się nieco ciężki.