ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Here-String总报错?3条位置规则避坑指南

Here-String总报错?3条位置规则避坑指南 Here-String总报错3条位置规则避坑指南【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell写多行模板时你是否被这句报错拦下No characters are allowed after a here-string header but before the end of the line。代码看着没问题解析器却不放行。问题出在 Here-String 起始与结束标记的位置上本文讲清 3 个位置能避开绝大多数 here-string 解析错误。原理速览Here-String 是用和界定符包住的多行字符串双引号支持变量插值单引号/则为纯文本。可以把它理解成把开闭引号分别写到两行上。约束在于两个锚点位置是固定的开始标记必须独占行尾结束标记必须顶格在行首。因为解析器是靠行首而非内容来匹配结束标记的所以开始标记后多一个字符、结束标记前多一个空格匹配就会断裂——这也是报错却看不出错在哪的根源。如果你要在 cmdlet 工程里使用 here-string 模板可参照官方示例先引用 powershell-core SDK在 NuGet 包管理器中勾选 powershell-core 源与包如图所示。踩坑实录与解法开始标记 后多了注释或空格写多行模板时习惯在同一行加注释说明用途。$text # 用户信息模板 User: $name 因为解析器要求之后到行尾之间不能有任何字符空格也算所以这一行直接判错。把注释挪到上一行即可# 用户信息模板 $text User: $name 提示警惕不可见的行尾空格很多编辑器默认不显示它。结束标记 被编辑器自动缩进编辑器的自动缩进经常把收尾的推到与正文相同的层级随即出现报错 White space is not allowed before the string terminator.。$text User: $name 原因结束标记只允许出现在 0 列前面不能有空格前导空格会破坏锚点匹配。把它顶格放到行首即修复$text User: $name 这条规则有官方测试用例佐证Parser.Tests.ps1 中直接断言了 here-string 的边界错误行为。反引号换行后的注释被吞进字符串想在一行中部用反引号 续行行延续符时你大概率会在反引号后顺手写个注释结果不报错注释却进了字符串。$msg first line # 注释本意是说明用途 second line 因为在双引号 here-string 里反引号换行是去掉换行的转义组合所以下一行的# 注释被当作字符串内容直接拼到上一行。官方测试用例 LineContinuance.Tests.ps1 覆盖了行延续的边界行为。反引号后应保持为空$msg first line second line 提示写完先输出结果比对一遍所见非所得是它最常见的翻车形式。调试与验证[Parser]::ParseFile—— 不执行脚本即可解析文件并返回错误列表适合快速定位长模板里到底哪一行有问题$tokens $null; $errors $null [System.Management.Automation.Language.Parser]::ParseFile(template.ps1, [ref]$tokens, [ref]$errors) $errors官方解析器测试用例—— test/powershell/Language/Parser/ 验证 here-string 的边界行为当模板在 Windows 与 Linux 表现不一致时从这里排查例如 LineEndings.Tests.ps1 逐条验证了 CR/LF/CRLF 换行组合。速查表场景问题解法开始标记行后有空格或注释注释挪上一行独占行尾结束标记行被编辑器自动缩进将顶格放到 0 列反引号续行反引号后的注释被吞进字符串反引号后留空注释写外部输出字面量$反斜杠转义无效用反引号转义$name记住开在行尾、闭在行首、反引号后留空Here-String 解析不再报错。官方文档docs/FAQ.md 解析器源码src/System.Management.Automation/ 测试用例库test/powershell/Language/Parser/【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表