PowerShell Strings
help about_Quoting_Rules
用单引号的是 literal string,单引号内是什么便是什么(只有一个例外,连续两个单引号表示一个单引号); 用双引号的是 extending string,可以展开变量,可以转义字符。
PS > $name = "yan"
PS > 'hello`n$name'
hello`n$name
PS > "hello`n$name"
hello
yan
在单引号内,连续两个单引号表示一个单引号,相当于转义。 双引号类似,在双引号内,连续两个双引号表示一个双引号。
PS > 'It''s a dog.'
It's a dog.
PS > "He said ""I love her""."
He said "I love her".
Here Strings
多行字符串可以用 Here Strings。
Here Strings 也分为单引号、双引号两种,二者的区别同普通 strings。下面以单引号为例:
$message = @'
hello
world
'@; Write-Host $message
开始符号 @'
后面要换行;结束符号 '@
要在行首。
Escape Characters
help about_Escape_Characters
用反引号(`,backtick )转义,不用 \\
是因为 \\
用作了路径分隔符。
$n = 5
"The value is stored in `$n." # 阻止变量替换
stop-parsing symbol
在给程序传递参数时用转义符不方便,这时可以使用 stop-parsing symbol --%
,它之后的视为 literal string,只能使用环境变量,遇到 pipeline 或 line ending 就结束,不能续行。
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
# 传递给 icacls 的参数为 X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
API
$string = "hello world"
# 查看 type
$string.GetType().FullName
# 查看 API
$string | Get-Member
常见操作
拼接字符串
PS > "a" + "b"
ab
对于超长字符串,用 String build 效率更好。
重复字符:
PS > "a" * 3
aaa
遍历字符串
C# 可以用 foreach 遍历字符串,PowerShell 只能用 for。
Format
-f
Format operator,格式化
Replace
-replace
不区分大小写-ireplace
明确不区分大小写-creplace
区分大小写
"book" -replace "B", "C"
# Cook
Search
-contains
操作符
Get-Help about_Match
-like
操作符
Get-Help about_Match
-match
操作符
Get-Help about_Match
Split
除了 String.Split() [Regex]::Split() 之外,可以用 -split
operator 分割 string
help about_Split
示例
# delimiter 默认为 space
-split "red yellow blue green"
# 指定 delimiter
"Lastname:FirstName:Address" -split ":"
# 让结果包含 delimiter
"Lastname:FirstName:Address" -split "(:)"
Trim
三个方法:Trim,TrimStart, TrimEnd
PS > "Hello World".TrimEnd(" World")
he
结果为什么不是 “hello”?
TrimEnd 可以接受一个 char[]
参数,表示要删除的字符。PowerShell 在这里将 string 转为 char[]
,等同于 "Hello World".TrimEnd(' ','w','o','r,'l','d')
。