2017-12-31 19 views
1

In Powershell help about_Automatic_Variables gibt Definitionen, die einfach genug sind, aber keine ein Beispiel, wie sie nützlich sein könnten:

$$ das letzte Zeichen in der letzten Zeile der Sitzung empfangen Enthält.

$^ Enthält das erste Token in der letzten von der Sitzung empfangenen Zeile.

Warum sind diese ersten/letzten Tokens nützlich genug, um eine Sprachfunktion wie diese zu rechtfertigen?

Hat es etwas mit der TAB-Vervollständigung zu tun?

Antwort

2

Diese kommen von ihren Cousins ​​in Unix-Shells (see !! in this answer). Sie sind nicht nützlich in Skripten, aber sie sind nützlich [Citation benötigt] bei der Verwendung von PowerShell als Shell.

Zum Beispiel:

C:\Users\Briantist> Get-Service Workstation 
C:\Users\Briantist> Start-Service $$ 

Sie sparen Sie davon ab, das letzte Token wieder zu geben. Ein langer Pfad oder ein anderes kompliziertes Token kann ein schmerzhafter Tipp sein.

Ähnlich ist es mit $^ ermöglicht es Ihnen, das erste Token wieder zu verwenden:

C:\windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -command '[Environment]::Is64BitProcess' 
# Run a 32-bit version of powershell and test that it's not 64 bit 
$^ -command '<# an actual command you wanted to run in 32 bit #>' 

Meine Vermutung ist, dass diese mehr nützlich schien, wenn die Sprache zuerst entworfen wurde, aber ich persönlich nicht glaube, sie endete so nützlich sein.

Get-Service Workstation 
:

Da Rohrleitungen von einem Befehl zum anderen ist oft mehr idiomatische in Powershell (und in gewisser Weise und Situationen umfangreicher als in Unix verwendet wird), das erste Beispiel mit $$, wäre wahrscheinlich so sein mehr

(sieht Ausgabe verwendet dass vorherigen Befehl auf der Leitung zu bekommen), dann: in dieser Antwort

Get-Service Workstation | Start-Service 
+0

die wichtige Information ist, dass $$ und $^war seine Aussage, dass sie weren‘ t usefu l in Skripten. Sobald ich das gesehen habe, habe ich die Definitionen in einem neuen Licht gesehen. Der Ausdruck * letzte von der Sitzung empfangene Zeile * bedeutet effektiv die *** vorherige *** Zeile, die an der PowerShell-Eingabeaufforderung eingegeben wurde, sie repräsentiert nicht den Aufruf des aktuellen Skripts oder der aktuellen Funktion. Durch einige Experimente habe ich entdeckt, dass Sie innerhalb eines Skripts oder einer Funktion tatsächlich ihre Werte vorübergehend ändern können. –

+0

Mit diesem Verständnis akzeptiere ich seine Aussage ohne Zitat. Es macht nur Sinn. –