Emlak İsimlerinin Kısaltılması
Ne yazık ki, parametrelerden farklı olarak, özellikler / yöntemler (bir nokta ile erişilen herhangi bir şey .
) genellikle belirsiz halleriyle kısaltılamaz.
Ancak bazı cmdlet'ler özellik adları üzerinde çalışabilir ve joker karakterler alabilir ve bunun için bilinen %
ve ?
yararlı olabilecek az sayıda parametre seti vardır .
Genellikle bir script bloğuna geçip öğeye atıfta bulunuruz $_
, ancak özellik adını alan başka bir formu vardır ve bir joker karakteri kabul eder.
$o|select Le*
$o|%{$_.Length}
.Length
Bizim gibi bir özellik ile normalde bir dizide çalışacak olan v3 sihirini kullanamayız, çünkü Length
dizinin kendisinin bir özelliğidir, bu yüzden yukarıdaki iki bireysel üyelerin uzunluklarını almak için kullanılabilir. select
Biraz daha kısa bit geliyor.
Ancak %
doğrudan bir mülk adını alabilir ve bu değeri döndürebilir:
$a|% Length
Bu joker karakterlerle kısaltılabilir. Joker karakter tek bir özelliğe çözümlenmelidir (veya daha sonra bununla ilgili bir yöntem), bu nedenle değilse, tam olarak hangi üyelere çözümlenebileceğini belirten yararlı bir hata verecektir.
Durumunda Length
, Le*
tipik olarak kısa süre. Tek bir dizgede bile, bu yöntem sadece özelliği kullanmaktan 1 bayt daha kısadır.
$a.Length # 9 #(doesn't work on array)
$a|%{$_.Length} # 15
$a|% Le* # 8
Ancak bununla ne yaptığınıza bağlı olarak, bu daha kötü olabilir. Yapabilirsiniz, $a.Length*5
ancak onu ifade etmek için boru hattı ifadesiyle yapmak ($a|% Le*)*5
; Bir diziye karşıysa yine de buna değer olabilir, ancak asıl nokta, her zaman düz bir ikame olarak uygun olmamasıdır.
Aynı zamanda yöntemlerle de çalışır ve hangisinin ()
aynı uzunlukta bir tam isim yaptığını, ancak bazen onu sarmakla ilgili yukarıdakilerle aynı kısıtlamayı bırakabilirsiniz . Yöntemin parametresi olmayan bir aşırı yüklemesi olmalıdır (argümanları, yöntem adının arkasına yerleştirerek geçirebilirsiniz, bu gerçekten güzel):
$a.ToUpper() # 12
$a|% *per # 9
Argümanlarla:
'gaga'-replace'g','r' # 21
'gaga'|% *ce g r # 16
Bunlar, -replace
operatörün bir regex yerine koymasıyla kesinlikle aynı değildir , ancak sadece bir dize yerine koyuyorsanız, (şimdi) yöntemi kullanmak daha kısa olabilir; Bu, dizgelerin metot argümanları yerine cmdlet argümanları olmalarına yardımcı olur, bu yüzden alıntılanmaları gerekmez.
Nesnenin Özellikleri
?
(kısmi) özellik adlarını da alabilir ve buna bir "operatör" uygulayabilir (anahtar parametreleri şeklinde). Yine, bu Where-Object
özellik adı yeterince uzun ve benzersiz ise, standart scriptblock yaklaşımını kullanmaktan daha kısa olabilir .
$a|?{$_.Length-gt5} # 19
$a|? Le* -GT 5 # 14
($a|% Le*)-gt5 # 14 - Lengths, not objs