簡體   English   中英

句號“.”是什么意思操作員在powershell中做什么?

[英]What does the period '.' operator do in powershell?

這是一個奇怪的。 通常,當我從 powershell 執行外部命令時,我會像這樣使用&運算符:

& somecommand.exe -p somearguments

然而,今天我遇到了. 運算符使用如下:

.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus

在這種情況下,該期間有什么作用? 我不明白。

這 ”。” 點源運算符將從您調用的其他腳本發送和接收變量。 “&” 調用運算符將只發送變量。

例如,考慮以下幾點:

腳本 1 (call-operator.ps1):

clear

$funny = "laughing"

$scriptpath = split-path -parent $MyInvocation.MyCommand.Definition
$filename = "laughing.ps1"

"Example 1:" # Call another script. Variables are passed only forward.

& $scriptpath\$filename

"Example 2:" # Call another script. Variables are passed backwards and forwards.

. $scriptpath\$filename
$variableDefinedInOtherScript

腳本2(laughing.ps1):

# This is to test the passing of variables from call-operator.ps1

"I am $funny so hard. Passing variables is so hilarious."

$variableDefinedInOtherScript = "Hello World!"

創建兩個腳本並只運行第一個。 你會看到“.” 點源操作符發送和接收變量。

兩者都有其用途,所以要有創意。 例如,如果您想修改另一個腳本中變量的值,同時保留當前腳本中的原始值,則“&”調用運算符將​​非常有用。 有點保障。 ;)

The Short:它是一種特殊運算符,用於實現常規運算符無法實現的功能。 這個特殊的運營商. 實際上有兩個截然不同的特殊運算符用例。

長:

與任何其他語言、腳本或其他語言一樣,PowerShell 腳本也支持許多不同類型的運算符來幫助操作值。 這些常規運算符包括:

  • 算術
  • 任務
  • 比較
  • 邏輯的
  • 重定向
  • 項目清單
  • 拆分並加入
  • 類型
  • 一元

但是,PowerShell 還支持所謂的特殊運算符,用於執行其他類型的運算符無法執行的任務。

這些特殊運算符包括:

  • @()數組子表達式運算符
  • &呼叫接線員
  • [ ]運算符
  • ,逗號運算符
  • . 點源運算符
  • -f格式運算符
  • [ ]索引運算符
  • | 管道操作員
  • . 屬性解引用運算符
  • ..范圍運算符
  • ::靜態成員運算符
  • $( )表達式運算符

. 點源運算符:在此上下文中使用以允許腳本在當前范圍內運行,基本上允許將腳本創建的任何函數、別名和變量添加到當前腳本中。

例子:

. c:\scripts.sample.ps1 

請注意,此應用程序的. 特殊運算符后跟一個空格,以區別於代表當前目錄的 ( . ) 符號

例子:

. .\sample.ps1

. 屬性取消引用運算符:允許訪問跟隨在. 通過指示.左側的表達式. 字符是一個對象,右邊的表達式是一個對象成員(屬性或方法)。

例子:

$myProcess.peakWorkingSet  
(get-process PowerShell).kill()

免責聲明和來源:

我在查看 PowerShell 腳本時遇到了同樣的問題,我試圖擴展其功能集並在研究答案時登陸這里。 但是我設法找到使用我的回答這個宏偉寫了微軟發展網絡上輔以這種從IT專業人士同樣的想法進一步擴大。

干杯。

點是調用運算符:

$a = "Get-ChildItem" 
. $a # (executes Get-ChildItem in the current scope)

但是,在您的情況下,我看不到它的作用。

.Period 或 .full stop 用於對象屬性;

$CompSys.TotalPhysicalMemory

請參閱此處: http : //www.computerperformance.co.uk/powershell/powershell_syntax.htm#Operators_

這個答案是對 David Brabant 和他的評論者已經提供的答案的稍微擴展。 雖然這些言論都是真實和中肯的,但還是有遺漏的地方。

OP 在調用外部命令時使用&是不必要的。 省略&將沒有任何影響(以他的用法為例)。 &的目的是允許調用名稱為(字符串)表達式值的命令。 通過使用上面的& ,powershell 然后(本質上)將后續參數視為字符串,其中第一個是&正式調用的命令名稱。 如果&被省略,powershell 會將行中的第一項作為要執行的命令。

然而, . 在第二個示例中必要的(盡管正如其他人所指出的, &在這種情況下也能正常工作)。 沒有它,命令行將以變量訪問( $env:systemdrive )開頭,因此 powershell 將期待某種形式的表達式。 但是,緊跟在變量引用之后的是一個裸文件路徑,它不是一個有效的表達式並且會產生一個錯誤。 通過使用. (或& ) 在行的開頭,它現在被視為命令(因為開頭看起來不像一個有效的表達式)並且參數被處理為可擴展字符串 ( " " )。 因此,命令行被視為

. "$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd" "install" "notepadplusplus"

第一個參數用$env:systemdrive代替,然后. 調用如此命名的程序。

注:PowerShell進程如何命令行參數的完整描述的方式更重要的是這里給出復雜。 這個版本被縮減為回答問題所需的基本部分。 查看about_Parsing以獲得全面的描述。 它並不完整,但應該涵蓋大多數正常使用。 在 stackoverflow 和 github(powershell 現在所在的地方)上還有其他帖子,涵蓋了官方文檔中未列出的一些看似古怪的行為。 另一個有用的資源是about_Operators,盡管這還不夠完整。 一個例子是 的等價. &在調用 powershell 腳本/cmdlet 以外的東西時根本沒有提及。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM