Apakah ada fungsi built-in- IsNullOrEmpty
like untuk memeriksa apakah string null atau kosong, di PowerShell?
Saya tidak dapat menemukannya sejauh ini dan jika ada cara bawaan, saya tidak ingin menulis fungsi untuk ini.
.net
string
powershell
null
kue pensil
sumber
sumber
String.IsNullOrEmpty
?Jawaban:
Anda dapat menggunakan
IsNullOrEmpty
metode statis:sumber
!
. Itu hanya berfungsi di versi PowerShell yang lebih baru.!
adalah alias untuk-not
Kalian membuat ini terlalu sulit. PowerShell menangani ini dengan sangat elegan misalnya:
sumber
IsNullOrWhitespace()
untuk skenario itu. Tetapi setelah 11 tahun menulis dengan PowerShell, saya merasa saya perlu tes string yang sangat jarang . :-)Selain itu untuk
[string]::IsNullOrEmpty
memeriksa nol atau kosong, Anda dapat melemparkan string ke Boolean secara eksplisit atau dalam ekspresi Boolean:Keluaran:
sumber
If
klausa secara internal mengubah segala sesuatu di dalam tanda kurung menjadi boolean tunggal yang berartiif($string){Things to do for non-empty-nor-null}
atauif(!$string){Things to do for empty-or-null}
tanpa konversi eksplisit[bool]
akan cukup.Jika itu adalah parameter dalam suatu fungsi, Anda dapat memvalidasinya dengan
ValidateNotNullOrEmpty
seperti yang Anda lihat dalam contoh ini:sumber
Secara pribadi, saya tidak menerima spasi putih ($ STR3) sebagai 'tidak kosong'.
Ketika variabel yang hanya berisi spasi putih dilewatkan ke parameter, itu akan sering kesalahan bahwa nilai parameter mungkin bukan '$ nol', alih-alih mengatakan itu mungkin bukan spasi, beberapa perintah hapus mungkin menghapus folder root alih-alih subfolder jika nama subfolder adalah "ruang putih", semua alasan untuk tidak menerima string yang berisi spasi putih dalam banyak kasus.
Saya menemukan ini adalah cara terbaik untuk mencapainya:
Kosong
Kosong
Kosong!! :-)
Tidak kosong
sumber
Saya memiliki skrip PowerShell yang harus saya jalankan di komputer yang ketinggalan zaman sehingga tidak memiliki [String] :: IsNullOrWhiteSpace (), jadi saya menulis skrip saya sendiri.
sumber
sumber
Penggantian PowerShell 2.0 untuk
[string]::IsNullOrWhiteSpace()
isstring -notmatch "\S"
(" \ S " = karakter non-spasi putih)
Performa sangat dekat:
sumber
Cara lain untuk mencapai ini dengan cara PowerShell murni adalah dengan melakukan sesuatu seperti ini:
Ini berhasil mengevaluasi null, string kosong, dan spasi putih. Saya memformat nilai yang diteruskan menjadi string kosong untuk menangani null (jika tidak, null akan menyebabkan kesalahan ketika Trim dipanggil). Kemudian hanya mengevaluasi kesetaraan dengan string kosong. Saya pikir saya masih lebih suka IsNullOrWhiteSpace, tetapi jika Anda mencari cara lain untuk melakukannya, ini akan berhasil.
Dalam kebosanan, saya bermain dengan beberapa ini dan membuatnya lebih pendek (meskipun lebih samar):
atau
tergantung pada apa yang Anda coba lakukan.
sumber
Perhatikan bahwa
"if ($str)"
dan"IsNullOrEmpty"
tes tidak bekerja secara sebanding dalam semua kasus: penugasan$str=0
menghasilkan salah untuk keduanya, dan tergantung pada semantik program yang dimaksudkan, ini bisa menghasilkan kejutan.sumber
Periksa panjangnya. Jika objek itu ada, ia akan memiliki panjang.
Objek kosong tidak memiliki panjang, tidak ada, dan tidak dapat diperiksa.
Objek string memiliki panjang.
Pertanyaannya adalah: IsNull atau IsEmpty, BUKAN IsNull atau IsEmpty atau IsWhiteSpace
sumber
Null objects have no length
- sudahkah Anda mencoba menjalankan$null.length
? :-) Untuk tes bool cepat, menyalurkan ke Get-Member dan kemudian harus menangani kesalahan yang dihasilkan untuk case $ null sepertinya sedikit berat bagi saya.