将以下内容放入脚本中将会失败:
$MyString = @'
hello
@'
'@
bye
'@
write-host $MyString
Run Code Online (Sandbox Code Playgroud)
返回的错误如下:
At C:\scripts\test.ps1:6 char:1
+ '@
+ ~~
The string is missing the terminator: '.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Run Code Online (Sandbox Code Playgroud)
在嵌套的@'and'@前面加上反引号(重音符号)确实可以用作转义字符,但它也被视为文字,因此出现在 的输出中$MyString。
是否有正确的方法可以在不干扰输出的单引号此处字符串中转义单引号此处字符串?
注意:
我应该提到,外部此处字符串的内容是动态填充的,该内容由另一个程序作为命令行参数提供给 powershell 脚本。这没有反映在示例代码中,因为我不想用我非常具体且有些利基的实现来模糊问题。
外部此处字符串不太可能包含内部此处字符串(但有可能发生),因此我认为需要进行一些防御性编程来适应这种情况。
我开发了一个使用 PowerShell 充当基于控制台的应用程序(例如 ncurses)的脚本。
Lucida Console字体是在脚本的快捷方式中配置的。
我想为用户提供更改字体大小的能力。以下模块就是这样做的,但是字体始终重置为“光栅字体”:https://4sysops.com/archives/change-powershell-console-font-size-with-cmdlet/
我不明白为什么会发生这种情况,因为代码似乎根据对当前字体信息的引用生成合法字体大小的列表。
@sodawillow 的评论让我走上了正确的道路。详细说明...
看来有效字体大小的列表是由控制台窗口大小决定的(可能还有其他我没有考虑到的因素)。
例如,获取-consolefontinfo | format-table在窗口大小为 120x64 时返回以下内容:
nFont dwFontSizeX dwFontSizeY
----- ----------- -----------
0 84 42
1 70 48
2 52 64
3 105 64
4 105 64
5 120 64
6 120 64
7 168 64
8 52 96
9 105 96
10 140 96
11 210 128
Run Code Online (Sandbox Code Playgroud)
而窗口大小为 106x51 时,它返回:
nFont dwFontSizeX dwFontSizeY
----- ----------- -----------
0 104 49
1 114 49
2 …Run Code Online (Sandbox Code Playgroud)