大家已經PowerShell中的運算符有了一定感性的認識。我們首先來學習“+”運算符。PowerShell定義了“+”運算符處理數值類型、字符串類型、數組類型和哈希表類型的具體行為。在進行數值計算時,“+”和平時的數值計算規則基本一樣。不過需要注意,由于計算機內部表示不同數值類型時,使用的存儲空間不同,因此這些類型都只能表示一個范圍內的數據。在進行數值運算的過程中,如果計算結果超過了參與計算數值類型的值域時,PowerShell將會自動進行類型轉換,使用值域更大的數據類型來保存結果。例如:
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的最大值,如果再執行“+ 1”的運算,就會導致該數值超出int類型的值域,因此PowerShell自動將數據類型轉換為Double類型。類似的,[int]::MinValue表示了int類型的最小值。
當對字符串類型操作數使用“+”運算符時,PowerShell將會對字符串進行連接操作,返回一個新的字符串,這種操作在C#語言中、SQL Server數據庫的T-SQL語法中是一致的。例如:
PS C:\&; "Hello" + " " + "world!"
Hello world!
當對數組類型操作數使用“+”運算符時,將會執行數組連接操作,返回一個新的數組,這與在C#語言中的行為一致。例如:
PS C:\&; $array1 = 1,2,3
PS C:\&; $array2 = 4,5
PS C:\&; $array3 = $array1 + $array2
PS C:\&; "$array3"
1 2 3 4 5
例子中首先定義了數組array1,它包含1、2和3這三個元素。接下來用數組array1與數組array2相加,并將返回結果存儲在變量array3中。最后,輸出數組中的元素到控制臺。在PowerShell中,雙引號中引用數組時,數組的每個元素將會被存儲在變量$ofs中的字符串相互連接,并輸出。(“$ofs”的默認值為空格字符)。
當對哈希表類型操作數使用“+”運算符時,PowerShell將把“+”右邊的哈希表鍵值對添加到左邊的哈希表中。如果添加的鍵值已經存在于左邊哈希表中,PowerShell就會給出錯誤提示。例如:
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,它包含了研發部門的員工Tom和Jerry。接下來定義了哈希表sale,員工只有Hero一人。將dev和sale相加后得到包含這三名員工的新哈希表。如果右邊哈希表中包含了與左邊哈希表相同的鍵值對,PowerShell將會給出錯誤信息:
PS C:\&; $manager = @{ Tom = 3 }
PS C:\&; $dev + $manager
Bad argument to operator '+': 已添加項。字典中的關鍵字:“Tom”所添加的關鍵字:“Tom”.
At line:1 char:7
+ $dev + $manager
在前面的例子中,都是相同類型的對象相加。您可能正在思考,如果在“+”兩邊不是相同類型的對象,結果到底會是什么呢?下面是一些常見的情況:
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在發現“+”運算符時,將會根據左操作數的類型來決定計算的規則。在第一個表達式中123 + '23'中,123是整數,因此“+”執行數值加法運算。但是由于右操作數是字符串類型,因此PowerShell首先對該操作數進行類型轉換。所以最后,我們看到結果為數值類型的值:146。第二個例子中,字符串包含了一個整數的十六進制表示形式,PowerShell將該數值正確轉換成數值類型并進行計算。第三個例子中,字符串'test'是無法轉換為整數類型的,因此PowerShell給出錯誤信息:“輸入串的格式不正確”。第四個例子中,左操作數變成了包含數字的字符串,因此PowerShell執行了字符串的連接操作。
您可能感興趣的文章:- PowerShell中使用Like運算符配合通配符查找字符串例子
- PowerShell中常用的一些特殊運算符介紹
- Windows Powershell 進行數學運算