PowerShell中的加法運(yùn)算詳解
大家已經(jīng)PowerShell中的運(yùn)算符有了一定感性的認(rèn)識(shí)。我們首先來學(xué)習(xí)“+”運(yùn)算符。PowerShell定義了“+”運(yùn)算符處理數(shù)值類型、字符串類型、數(shù)組類型和哈希表類型的具體行為。在進(jìn)行數(shù)值計(jì)算時(shí),“+”和平時(shí)的數(shù)值計(jì)算規(guī)則基本一樣。不過需要注意,由于計(jì)算機(jī)內(nèi)部表示不同數(shù)值類型時(shí),使用的存儲(chǔ)空間不同,因此這些類型都只能表示一個(gè)范圍內(nèi)的數(shù)據(jù)。在進(jìn)行數(shù)值運(yùn)算的過程中,如果計(jì)算結(jié)果超過了參與計(jì)算數(shù)值類型的值域時(shí),PowerShell將會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,使用值域更大的數(shù)據(jù)類型來保存結(jié)果。例如:
PS C:\> 9 + 11 20 PS C:\> (9 + 11).GetType().FullName System.Int32 PS C:\> [int]::MaxValue + 1 2147483648 PS C:\> ([int]::MaxValue + 1).GetType().FullName System.Double PS C:\> [int]::MinValue - 1 -2147483649 PS C:\> ([int]::MinValue - 1).GetType().FullName System.Double
例子中的[int]::MaxValue表示類型int的最大值,如果再執(zhí)行“+ 1”的運(yùn)算,就會(huì)導(dǎo)致該數(shù)值超出int類型的值域,因此PowerShell自動(dòng)將數(shù)據(jù)類型轉(zhuǎn)換為Double類型。類似的,[int]::MinValue表示了int類型的最小值。
當(dāng)對(duì)字符串類型操作數(shù)使用“+”運(yùn)算符時(shí),PowerShell將會(huì)對(duì)字符串進(jìn)行連接操作,返回一個(gè)新的字符串,這種操作在C#語(yǔ)言中、SQL Server數(shù)據(jù)庫(kù)的T-SQL語(yǔ)法中是一致的。例如:
PS C:\> "Hello" + " " + "world!" Hello world!
當(dāng)對(duì)數(shù)組類型操作數(shù)使用“+”運(yùn)算符時(shí),將會(huì)執(zhí)行數(shù)組連接操作,返回一個(gè)新的數(shù)組,這與在C#語(yǔ)言中的行為一致。例如:
PS C:\> $array1 = 1,2,3 PS C:\> $array2 = 4,5 PS C:\> $array3 = $array1 + $array2 PS C:\> "$array3" 1 2 3 4 5
例子中首先定義了數(shù)組array1,它包含1、2和3這三個(gè)元素。接下來用數(shù)組array1與數(shù)組array2相加,并將返回結(jié)果存儲(chǔ)在變量array3中。最后,輸出數(shù)組中的元素到控制臺(tái)。在PowerShell中,雙引號(hào)中引用數(shù)組時(shí),數(shù)組的每個(gè)元素將會(huì)被存儲(chǔ)在變量$ofs中的字符串相互連接,并輸出。(“$ofs”的默認(rèn)值為空格字符)。
當(dāng)對(duì)哈希表類型操作數(shù)使用“+”運(yùn)算符時(shí),PowerShell將把“+”右邊的哈希表鍵值對(duì)添加到左邊的哈希表中。如果添加的鍵值已經(jīng)存在于左邊哈希表中,PowerShell就會(huì)給出錯(cuò)誤提示。例如:
PS C:\> $dev = @{ Tom = 1; Jerry = 2}
PS C:\> $sale = @{ Hero = 1; }
PS C:\> $dev + $sale
Name Value
---- -----
Tom 1
Jerry 2
Hero 1
例子的開頭定義了哈希表dev,它包含了研發(fā)部門的員工Tom和Jerry。接下來定義了哈希表sale,員工只有Hero一人。將dev和sale相加后得到包含這三名員工的新哈希表。如果右邊哈希表中包含了與左邊哈希表相同的鍵值對(duì),PowerShell將會(huì)給出錯(cuò)誤信息:
PS C:\> $manager = @{ Tom = 3 }
PS C:\> $dev + $manager
Bad argument to operator '+': 已添加項(xiàng)。字典中的關(guān)鍵字:“Tom”所添加的關(guān)鍵字:“Tom”.
At line:1 char:7
+ $dev + <<<< $manager
在前面的例子中,都是相同類型的對(duì)象相加。您可能正在思考,如果在“+”兩邊不是相同類型的對(duì)象,結(jié)果到底會(huì)是什么呢?下面是一些常見的情況:
PS C:\> 123 + '23' 146 PS C:\> 123 + '0xa' 133 PS C:\> 4 + 'test' Cannot convert value "test" to type "System.Int32". Error: "Input string was not in a correct format." At line:1 char:4 + 4 + <<<< 'test' PS C:\> '02' + 73 0273
PowerShell在發(fā)現(xiàn)“+”運(yùn)算符時(shí),將會(huì)根據(jù)左操作數(shù)的類型來決定計(jì)算的規(guī)則。在第一個(gè)表達(dá)式中123 + '23'中,123是整數(shù),因此“+”執(zhí)行數(shù)值加法運(yùn)算。但是由于右操作數(shù)是字符串類型,因此PowerShell首先對(duì)該操作數(shù)進(jìn)行類型轉(zhuǎn)換。所以最后,我們看到結(jié)果為數(shù)值類型的值:146。第二個(gè)例子中,字符串包含了一個(gè)整數(shù)的十六進(jìn)制表示形式,PowerShell將該數(shù)值正確轉(zhuǎn)換成數(shù)值類型并進(jìn)行計(jì)算。第三個(gè)例子中,字符串'test'是無(wú)法轉(zhuǎn)換為整數(shù)類型的,因此PowerShell給出錯(cuò)誤信息:“輸入串的格式不正確”。第四個(gè)例子中,左操作數(shù)變成了包含數(shù)字的字符串,因此PowerShell執(zhí)行了字符串的連接操作。
相關(guān)文章
Powershell檢查網(wǎng)站響應(yīng)并計(jì)算執(zhí)行時(shí)間例子
這篇文章主要介紹了Powershell檢查網(wǎng)站響應(yīng)并計(jì)算執(zhí)行時(shí)間例子,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
PowerShell中字符串使用單引號(hào)和雙引號(hào)的區(qū)別
這篇文章主要介紹了PowerShell中字符串使用單引號(hào)和雙引號(hào)的區(qū)別,大家可能會(huì)經(jīng)常遇到這個(gè)問題,需要的朋友可以參考下2014-08-08
Powershell小技巧之獲取當(dāng)前的時(shí)間并轉(zhuǎn)換為時(shí)辰
這篇文章主要介紹了使用Powershell獲取當(dāng)前的時(shí)間并轉(zhuǎn)換為時(shí)辰的方法,非常簡(jiǎn)單實(shí)用,有需要的朋友可以參考下2014-09-09
Powershell實(shí)現(xiàn)獲取電腦序列號(hào)功能腳本分享
這篇文章主要介紹了Powershell實(shí)現(xiàn)獲取電腦序列號(hào)功能腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
PowerShell定義函數(shù)參數(shù)的2種方法和傳參方法實(shí)例
這篇文章主要介紹了PowerShell定義函數(shù)參數(shù)的2種方法和使用方法實(shí)例,簡(jiǎn)潔易懂的好文,需要的朋友可以參考下2014-07-07
PowerShell檢查網(wǎng)卡狀態(tài)和對(duì)應(yīng)的電源設(shè)置
這篇文章主要介紹了PowerShell檢查網(wǎng)卡狀態(tài)和對(duì)應(yīng)的電源設(shè)置,本文直接給出了實(shí)現(xiàn)方法和使用命令及輸出結(jié)果,需要的朋友可以參考下2015-03-03
Powershell展開對(duì)象數(shù)據(jù)結(jié)構(gòu)并以JSON格式輸出
這篇文章主要介紹了Powershell展開對(duì)象數(shù)據(jù)結(jié)構(gòu)并以JSON格式輸出,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
Powershell實(shí)現(xiàn)監(jiān)測(cè)服務(wù)器連通狀態(tài)
這篇文章主要介紹了Powershell實(shí)現(xiàn)監(jiān)測(cè)服務(wù)器連通狀態(tài),代碼很簡(jiǎn)單,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05

