পাওয়ারশেলে $ _ এর অর্থ কী?


226

আমি পাওয়ারশেলের নীচে অনেকগুলি দেখেছি, তবে এটি ঠিক কী করে?

$_

5
প্রশ্ন, অবশ্যই, একক বিশেষ জন্য উত্তর দেওয়া হয়েছে টোকেন দেওয়া, কিন্তু একটি wallchart ব্যাখ্যা জন্য সব PowerShell বিশেষ টোকেন, কটাক্ষপাত করা PowerShell বিরাম চিহ্ন সম্পূর্ণ গাইড
মাইকেল Sorens

উত্তর:


171

এটি পাইপ লাইনের বর্তমান মানের জন্য পরিবর্তনশীল, যা $PSItemপাওয়ারশেল 3 এবং আরও নতুন বলা হয়।

1,2,3 | %{ write-host $_ } 

অথবা

1,2,3 | %{ write-host $PSItem } 

উদাহরণস্বরূপ উপরের কোডে %{}অ্যারেতে প্রতিটি মানের জন্য ব্লকটি বলা হয়। $_বা $PSItemপরিবর্তনশীল বর্তমান মান থাকতে হবে।


42
এটি অগত্যা পাইপলাইনের সাথে সম্পর্কিত নয়। এটি আরও একটি "বর্তমানে কার্যকর স্ক্রিপ্ট ব্লকের বর্তমান যুক্তি"। উদাহরণস্বরূপ আপনি যখন এটি একেবারে সূক্ষ্মভাবে ব্যবহার করতে পারেন ForEach-Objectবা Where-Objectআপনি এটি কোনওরকম ব্যবহার করতে পারবেন না Get-Foo|Add-Member NoteProperty Bar ($_.SomeProperty)- সেখানে একটি পাইপলাইন জড়িত রয়েছে, তবে কোনও স্ক্রিপ্ট ব্লক নেই এবং তাই নেই $_। (এটি বলা হচ্ছে, পাওয়ারশেল সহায়তা পাইপলাইনের জন্যও বোঝায় $_Conf বিভ্রান্তিমূলক))
জয়ে

@ জো আপনি আপনার উদাহরণে একেবারে $ _ ব্যবহার করতে পারেন। Get-Foo | Add-Member -Type NoteProperty -Name Bar -Value $_.SomeProperty
জালিয়রস

@Xalorous: শুধু কারণ এটি একটি ত্রুটি উৎপন্ন না মানে এই নয় এটি কাজ করে: Get-ChildItem | Add-Member -Type NoteProperty -Name Bar -Value $_.Name -PassThru | Select Bar... ওয়েল, এটা করতে পারেন যদি আপনি একটি আছে কাজ $_সুযোগ যেখানে আপনি যে পাইপলাইন নির্বাহ করছি না। তবে এরকম কিছু লেখার চেষ্টা করার সময় আপনি সাধারণত যা বোঝাতে চেয়েছেন তা থেকে এটি আলাদা।
জোয়

@ জো $_আপনি যা লিখেছেন তা হ'ল কোনও কারণে, সমস্ত বস্তুর লুপিং নয়। পরিবর্তে এটি চেষ্টা করুন। gci | % { $_ | add-member -Type NoteProperty -Name Bar -Value $_.name -PassThru } | Select Bar। আমার সন্দেহ হয় যে gci | cmdletসুস্পষ্ট পূর্বাভাস ব্যতীত হ'ল জিসিআই ফলাফল সংগ্রহ করা এবং সেমিডলেটটিতে একটি অ্যারে পাস করা হয়। তবে অ্যারে হ'ল একটি বস্তু, সুতরাং এটি অ্যারে অবজেক্টে একটি সম্পত্তি যুক্ত করে। অ্যারেতে 'নাম' বৈশিষ্ট্য নেই, তাই $ _ কে বরাদ্দ করা মান Bar _ বারটি $ নাল। নীচের লাইনটি হ'ল $ _ ব্যাপকভাবে ডাব্লু / পাইপলাইনে ব্যবহৃত হয়। লুপটি করতে% {need এর দরকার নেই নতুন।
জালারাস

অতিরিক্ত পাইপলাইন সহ ওয়ার্কিং সংস্করণ। gci | % { add-member -InputObject $_ -Type NoteProperty -Name Bar -Value $_.name -PassThru } | Select Bar
জালারাস

37

আমি সি # তে ল্যাম্বডা এক্সপ্রেশনটিতে ইনপুট প্যারামিটারের মতো এই পরিবর্তনশীলটি সম্পর্কে ভাবার সবচেয়ে সহজ উপায় বলে মনে করি। অর্থাৎ সি # তে বেনামে ফাংশনের $_মতো । নিম্নলিখিত উদাহরণগুলি বিবেচনা করুন:xx => Console.WriteLine(x)

শক্তির উৎস:

1,2,3 | ForEach-Object {Write-Host $_}

ছাপে:

1
2
3

অথবা

1,2,3 | Where-Object {$_ -gt 1}

ছাপে:

2
3

এবং এটি লিনিকিউ ব্যবহার করে সি # সিনট্যাক্সের সাথে তুলনা করুন:

var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));

ছাপে:

1
2
3

অথবা

list.Where( _ => _ > 1)
    .ToList()
    .ForEach(s => Console.WriteLine(s));

ছাপে:

2
3

6
সি # _তে ল্যাম্বডায় ইনপুট প্যারামিটার হিসাবে ব্যবহার করবেন না । _প্যারামিটারগুলি উপেক্ষা করার সময় কখনও কখনও ব্যবহৃত হয়, পরিবর্তে এক্স ব্যবহার করুন। stackoverflow.com/questions/424775/…
কার্লোস Muñoz

28

এই ওয়েবসাইট অনুসারে , এটি একটি উল্লেখ this, বেশিরভাগ লুপগুলিতে in

TH _ (ডলার আন্ডারস্কোর) 'এই' টোকেন। সাধারণত একটি foreach লুপ ভিতরে আইটেম বোঝায়। কার্য: একটি সংগ্রহে সমস্ত আইটেম মুদ্রণ করুন। সমাধান। ... | foreach {লিখন-হোস্ট $ _}


3
this$_পরিবর্তনশীল জন্য একটি বরং বিভ্রান্তিকর শব্দ । ওওপি-তে এটি সাধারণত শ্রেণিকে বোঝায়, পরিবর্তনশীল নয়।
oɔɯǝɹ

1
@ রেমকো বিশেষত যখন পিএস ভি 5 ক্লাসে ব্যবহারের জন্য এই ভেরিয়েবল যুক্ত করে।
জালিয়রস

5

$: _ স্বয়ংক্রিয় পরিবর্তনশীল $ PSItem জন্য একটি alias আছে (PowerShell v3.0 চালু; ব্যবহারের তথ্য এখানে পাওয়া ) যা পাইপ থেকে বর্তমান আইটেমটি প্রতিনিধিত্ব করে।

স্বয়ংক্রিয় চলকগুলির জন্য পাওয়ারশেল (v6.0) অনলাইন ডকুমেন্টেশন এখানে


1

_ হল একটি পরিবর্তনশীল যা পূর্ববর্তী | থেকে পাস করা প্রতিটি বস্তু / উপাদানকে পুনরুক্ত করে (নল)।


1

$_সিস্টেম দ্বারা নির্মিত একটি পরিবর্তনশীল যা সাধারণত ব্লক এক্সপ্রেশনগুলির অভ্যন্তরে থাকে এবং সেমিপ্লেটগুলি রেফার করে যা পাইপের সাথে ব্যবহার করা হয় যেমন Where-Objectএবং ForEach-Object

তবে এটি অন্যান্য ধরণের অভিব্যক্তিতেও ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ Select-Objectঅভিব্যক্তি বৈশিষ্ট্যের সাথে মিলিত। Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}। এই ক্ষেত্রে$_ আইটেমটি পাইপ করা হচ্ছে প্রতিনিধিত্ব করে তবে একাধিক অভিব্যক্তি উপস্থিত থাকতে পারে।

এটি কাস্টম প্যারামিটার বৈধতা দ্বারাও উল্লেখ করা যেতে পারে, যেখানে কোনও মানকে বৈধ করার জন্য স্ক্রিপ্ট ব্লক ব্যবহৃত হয়। এই ক্ষেত্রে $_প্রার্থনা থেকে প্রাপ্ত প্যারামিটার মানটি উপস্থাপন করে।

সি # এবং জাভা এর নিকটতম উপমা লামদা এক্সপ্রেশন। আপনি যদি পাওয়ারসেলকে বেসিকগুলিতে ভাঙেন তবে সবকিছুই একটি স্ক্রিপ্ট ব্লক যার মধ্যে একটি স্ক্রিপ্ট ফাইল একটি, ফাংশন এবং সেমিডলেট রয়েছে। আপনি নিজের প্যারামিটারগুলি সংজ্ঞায়িত করতে পারেন তবে কিছু ক্ষেত্রে আপনার দ্বারা সিস্টেম তৈরি করা হয় যা প্রক্রিয়া / মূল্যায়নের জন্য ইনপুট আইটেমকে উপস্থাপন করে । এই পরিস্থিতিতে স্বয়ংক্রিয় পরিবর্তনশীল হয় $_

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.