在here字符串标题之后,但在行结束之前,不允许有任何字符



我第一次尝试在PowerShell脚本中使用sqlplus执行Oracle查询。我收到这个错误消息:

At line:1 char:73
+ ... user/pw@RRRPRD.company.net:1521/RRRPRDC @"C:Users ...
+                                                                 ~
No characters are allowed after a here-string header but before the end of the line.

它似乎指向了"@"之后的C:;。有什么想法吗?我似乎在做这个例子中的事情。当我试图对连接信息进行回声处理时,我也会遇到同样的错误。

这是我在命令行测试的powershell代码,因为它永远挂起运行程序:

sqlplus user/pw@RRRPRD.company.net:1521/RRRPRDC @"C:UsersmeDocuments2021temp endToEndshort.sql"

这是使用powershell 5.1。有什么想法吗?我在这里看到了字符串标题,但由于我使用的是上面sqlplus链接中接受的示例,所以我不清楚它出了什么问题

更换

@"C:UsersmeDocuments2021temp endToEndshort.sql"

具有以下任一项:

  • `@"C:UsersmeDocuments2021temp endToEndshort.sql"
  • "@C:UsersmeDocuments2021temp endToEndshort.sql"
  • '@C:UsersmeDocuments2021temp endToEndshort.sql'

注意:如果路径不包含变量引用,那么使用逐字逐句(单引号(字符串('...'(可以说是最好的选择;如果是,则需要一个可扩展(双引号(字符串("..."(

所有变体最终都会逐字逐句地将以下字符串传递给sqlplus,我认为这是您的意图:

@C:UsersmeDocuments2021temp endToEndshort.sql


假设您正试图将@作为参数的部分逐字传递给sqlplus-CLI之间的一个常见约定是使用@<file-path>请求从文件中获取参数数据,而不是使用参数值本身。

但是,与其他shell不同,@是PowerShell中的元字符,可用于多种用途。

因此,应该是参数开头的逐字字符的@必须转义(带有`(或是带引号字符串的一部分,如上所示。请参阅概念性about_Special_Characters帮助主题。

如果unscaped参数的首字母@后跟"',PowerShell会认为您正在尝试创建一个here字符串,该字符串具有特殊的多行语法要求;错误消息指示它们未被满足。

最新更新