পাওয়ারশেলের কোনও স্ট্রিং নাল বা ফাঁকা আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


413

IsNullOrEmptyপাওয়ারশেলের কোনও স্ট্রিং নাল বা ফাঁকা আছে কিনা তা পরীক্ষা করার জন্য কোনও বিল্ট-ইন- লাইক ফাংশন রয়েছে কি ?

আমি এখনও অবধি এটি খুঁজে পাইনি এবং যদি কোনও অন্তর্নির্মিত উপায় থাকে তবে আমি এর জন্য কোনও ফাংশন লিখতে চাই না।


2
আশা করি এটি rkeithhill.wordpress.com/2007/01/06/…
gofor.net

8
আচ্ছা আপনি। নেট ব্যবহার করছেন, তাইলে আপনি কল করতে পারবেন না String.IsNullOrEmpty?
জন স্কিটি

উত্তর:


471

আপনি IsNullOrEmptyস্থির পদ্ধতিটি ব্যবহার করতে পারেন :

[string]::IsNullOrEmpty(...)

3
আমি এইভাবে আরও পছন্দ করি কারণ এটি আপনার পাওয়ারহেল জ্ঞান নির্বিশেষে যা কিছু করে তা সুস্পষ্ট - যা পাওয়ার-শেল প্রোগ্রামারদের জন্য অর্থবোধ করে।
পেনসিলকেক

18
আমার ধারণা আপনি কেবল করতে পারেন! $ Var
শে লেভি

4
পাওয়ারশেলের সাথে সচেতন হওয়ার একটি বিষয় হ'ল কোনও কমান্ডলেট বা ফাংশনে নাল স্ট্রিংগুলি নালায় না। তারা খালি স্টারে রূপান্তরিত হয়। মাইক্রোসফ্ট কানেক্ট বাগটি কানেক্ট.মাইক্রোসফট / পাওয়ার / শেল / ফেডব্যাক / বিবরণ / 861093/… এ দেখুন
জেমিসি

25
[স্ট্রিং] বিবেচনা করুন: খালি জায়গাগুলিও বৈধ করার জন্য ইসনুলআরওহাইটস্পেস (...)।
সাঁই

3
সতর্ক থাকুন @ShayLevy !। এটি কেবল পাওয়ারশেলের নতুন সংস্করণগুলিতে কাজ করে। !এর একটি নাম-not
কোলব ক্যানিয়ন

598

তোমরা ছেলেরা এটিকে খুব কঠিন করে দিচ্ছ। পাওয়ারশেল এটিকে বেশ মার্জিতভাবে পরিচালনা করে যেমন:

> $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

30
@pencilCake হ্যাঁ, আমি যা বলছি এবং উপরের উদাহরণটি এটি কার্যত দেখায়। পরীক্ষাটি যা পরীক্ষা করে না তা হ'ল ইসনুলআরওয়েইটস্পেস ()।
কীথ হিল

3
স্ক্রিপ্টিং দৃষ্টিকোণ থেকে আমি এই সমাধানটির সাথে আরও ভালভাবে সম্মত। বরাবরের মতো, কীথ হিলের সঠিক সমাধান রয়েছে! ধন্যবাদ।
ভিপ্পি

2
আপনি মার্জিত বলেন, তবে কোনও কারণে, এটি জেএসের মতো অনুভব করে।
ড্যান অ্যাটকিনসন

2
@ ভার্টিগোয়ের উপরে আমার প্রথম মন্তব্যটি দেখুন যেখানে আমি IsNullOrWhitespace()সেই দৃশ্যের জন্য ব্যবহার করার পরামর্শ দিই । তবে পাওয়ারশেলের সাথে স্ক্রিপ্ট করার 11 বছর পরে, আমি দেখতে পাচ্ছি যে আমার স্ট্রিং পরীক্ষা খুব কমই দরকার । :-)
কিথ হিল

3
"কীথহিল। দুঃখিত যে এটি এখনও অনিরাপদ, যেহেতু আপনার উদ্দেশ্যটি পরিষ্কার নয় you আপনি যখন [স্ট্রিং] ব্যবহার করেন: আপনি যখন ইশুলারআরপিটি ব্যবহার করেন, আপনি একেবারে পরিষ্কার IM প্রয়োজনীয় জিনিসগুলি নিখোঁজ রয়েছে isএকটি নিলআরম্পিটি প্রিডিকেট তাদের মধ্যে একটি ...
দিমিত্রি

40

ছাড়াও [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

4
ভাল পয়েন্ট। Ifঅনুচ্ছেদ অভ্যন্তরীণভাবে প্রথম বন্ধনের অভ্যন্তরের সমস্ত কিছুকে একক বুলিয়ানতে রূপান্তরিত করে যার অর্থ if($string){Things to do for non-empty-nor-null}বা if(!$string){Things to do for empty-or-null}সুস্পষ্ট রূপান্তর ছাড়াই [bool]যথেষ্ট হবে।
Ch.Idea

20

যদি এটি কোনও ফাংশনটির প্যারামিটার হয় তবে ValidateNotNullOrEmptyআপনি উদাহরণটিতে দেখতে পারা এটি দিয়ে যাচাই করতে পারেন:

Function Test-Something
{
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$UserName
    )

    #stuff todo
}

10

ব্যক্তিগতভাবে, আমি কোনও শূন্যস্থান ($ STR3) 'খালি নয়' হিসাবে গ্রহণ করি না।

যখন কেবল একটি শ্বেতক্ষেত্র রয়েছে এমন একটি ভেরিয়েবল একটি প্যারামিটারে প্রেরণ করা হয়, তখন প্রায়শই ত্রুটি হয় যে প্যারামিটারের মান 'ull নাল' নাও হতে পারে, পরিবর্তে এটি শ্বেতস্পেস না হওয়ার কথা বলার পরিবর্তে, কিছু অপসারণ কমান্ডগুলি পরিবর্তে একটি মূল ফোল্ডার সরিয়ে ফেলতে পারে সাবফোল্ডার যদি সাবফোল্ডারটির নাম একটি "সাদা স্থান" হয়, তবে অনেক ক্ষেত্রে শ্বেতস্পেস যুক্ত স্ট্রিং না মানার সমস্ত কারণ।

আমি এটি সম্পাদন করার সেরা উপায়:

$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'}

খালি না


5

আমার কাছে একটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে আমাকে একটি কম্পিউটারে চালিয়ে যেতে হবে এত পুরানো যে এটির [স্ট্রিং] :: ইসনুলআরওহাইটস্পেস () নেই, তাই আমি আমার নিজের লেখা।

function IsNullOrWhitespace($str)
{
    if ($str)
    {
        return ($str -replace " ","" -replace "`t","").Length -eq 0
    }
    else
    {
        return $TRUE
    }
}

5
# cases
$x = null
$x = ''
$x = ' '

# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}

3

জন্য PowerShell 2.0 প্রতিস্থাপন [string]::IsNullOrWhiteSpace()হয়string -notmatch "\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

1

খাঁটি পাওয়ারশেল উপায়ে এটি সম্পাদন করার আরেকটি উপায় হ'ল এরকম কিছু করা:

("" -eq ("{0}" -f $val).Trim())

এটি নাল, খালি স্ট্রিং এবং সাদা স্থানের জন্য সাফল্যের সাথে মূল্যায়ন করে। নাল হ্যান্ডেল করার জন্য আমি পাস করা মানকে একটি খালি স্ট্রিংয়ে ফর্ম্যাট করছি (অন্যথায় ট্রিম ডাকার সময় নাল একটি ত্রুটির কারণ ঘটবে)। তারপরে খালি স্ট্রিং সহ সাম্যতার মূল্যায়ন করুন। আমি মনে করি আমি এখনও ইসনুলআরওহাইটস্পেস পছন্দ করি তবে আপনি যদি এটির জন্য অন্য কোনও উপায় সন্ধান করেন তবে এটি কার্যকর হবে।

$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())

আপনি যা করার চেষ্টা করছেন তার উপর নির্ভরশীল।


1

মনে রাখবেন যে "if ($str)"এবং "IsNullOrEmpty"পরীক্ষাগুলি সমস্ত ক্ষেত্রে তুলনামূলকভাবে কাজ করে না: একটি নিয়োগের $str=0জন্য উভয়ই মিথ্যা উত্পাদন করে এবং উদ্দেশ্যপ্রণালী প্রোগ্রাম শব্দার্থের উপর নির্ভর করে এটি আশ্চর্য হতে পারে।


$ str = 0 একটি ভাল কোডিং অনুশীলন নয়। $ str = '0' ইসনুলআরএম্পটির প্রত্যাশিত ফলাফল কী তা নিয়ে সন্দেহ ছাড়বে।
দিমিত্রি

-1

দৈর্ঘ্য পরীক্ষা করুন। যদি অবজেক্টটি বিদ্যমান থাকে তবে এর দৈর্ঘ্য হবে।

নাল বস্তুর দৈর্ঘ্য নেই, বিদ্যমান নেই এবং এটি পরীক্ষা করা যায় না।

স্ট্রিং অবজেক্টের দৈর্ঘ্য রয়েছে।

প্রশ্নটি ছিল: ইসনুল বা ইস্পেম্টি, ইসনুল বা ইসএম্পটি বা ইসওয়াইটস্পেস নয়

#Null
$str1 = $null
$str1.length
($str1 | get-member).TypeName[0]
# Returns big red error

#Empty
$str2 = ""
$str2.length
($str2 | get-member).TypeName[0]
# Returns 0

## Whitespace
$str3 = " "
$str3.length
($str3 | get-member).TypeName[0]
## Returns 1 

2
পুনরায়- Null objects have no length - আপনি মৃত্যুদন্ড কার্যকর করার চেষ্টা করেছেন $null.length? :-) দ্রুত বুল টেস্টের জন্য, গেট-মেম্বারে পাইপিং করুন এবং তারপরে ফলস্বরূপ ত্রুটিটি পরিচালনা করতে হবে $ নাল মামলার বিষয়টি আমার কাছে কিছুটা ভারী ওজন বলে মনে হচ্ছে।
কিথ হিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.