如何在powershell中使用@ character?

Geo*_*uer 3 powershell

完全新手简单的powershell问题我正在尝试执行以下操作 - 对于当前目录中的每个*.sql文件运行

sqlplus username/password@connect_identifier_specified_in_argument @file_name
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

$scripts = dir *.sql
foreach($script in $scripts) {
    Write-Host sqlplus username/password"@"$args "@"$script.Name
}
Run Code Online (Sandbox Code Playgroud)

(我知道写主机将它输出到屏幕上,我现在只是想调试)

然而,对于powershell如何处理@字符有一些时髦的东西,当我运行它时,我总是得到类似的东西

PS C:\code\scripts> C:\utils\run_sql_scripts_on.ps1 identifier
sqlplus username/password@identifier @ ALERTS.sql
Run Code Online (Sandbox Code Playgroud)

在"@"之后看到那个空格?是什么赋予了?

aph*_*ria 7

用反引号(`)逃脱@.

Write-Host sqlplus username/password`@$args `@$script.Name
Run Code Online (Sandbox Code Playgroud)

  • 问题是PowerShell看到"@"和$ script.home是两个独立的参数,因为第二个是表达式,而Write-Host用空格连接所有参数. (3认同)
  • 反引号是PowerShell中的转义字符.@可以在PS中用于创建空数组,例如$ a = @().在这种情况下,我不认为@是问题,而是双引号.用字母替换@,你仍然会看到额外的空间.我认为Write-Host会自动在双引号字符串后面添加一个空格. (2认同)