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 操作符

"book" -replace "B", "C"
# Cook

-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')