2

什么时候需要在 Powershell 中用双引号将字符串括起来?我需要以下所有这些吗?

& "$sendemail" -f "$sender" -t "$recipient" -u "$subject" -o message-file="$logpath" -s "$emailserver" -o tls=no
4

3 回答 3

4

一个解释如何在 PoSH 中使用撇号和引号。在您的示例中,您不需要它们,因为您不扩展变量或执行连接。

于 2012-07-11T14:25:24.520 回答
4

在这种情况下,你不需要。

  • $sendemail希望已经是一个字符串,因此调用运算符&可以处理它(也许其他任何东西都会被强制转换为字符串)。
  • 所有其他变量也应正确引用:

    PS> $subject = 'subject string'
    PS> $recipient = 'recipient string'
    PS> $logpath = 'log path'
    PS> $emailserver = 'email server'
    PS> $recipient = 'recipient''s name'
    PS> $sender = 'sender''s name'
    PS> $sendemail = './echoargs.exe'
    PS> & $sendemail -f $sender -t $recipient -u $subject -o message-file=$logpath -s $emailserver -o tls=no
    arg 1: -f
    arg 2: sender's name
    arg 3: -t
    arg 4: recipient's name
    arg 5: -u
    arg 6: subject string
    arg 7: -o
    arg 8: message-file=log path
    arg 9: -s
    arg 10: email server
    arg 11: -o
    arg 12: tls=no
    

如果要将包含特殊字符(例如 shell 运算符或空格)的文字字符串传递给程序,则需要引号,例如:

./echoargs 'some spaces and a | pipe'

如果您的所有参数要么不包含此类内容,要么本身已经包含在字符串变量中,那么没有引号就可以了。

于 2012-07-11T14:34:32.710 回答
4

到目前为止,所有答案都只是完整问题“您何时需要在 PowerShell 中使用引号(以及何时需要,您使用哪种引号)?”的部分答案。尽管人们自然会认为 MSDN 页面about_quoting_rules会有完整的答案,但事实并非如此。它主要涵盖字符串插值和此处的字符串,但不涉及是否或是否真的需要引号。

PowerShell 中的答案可能比其他语言复杂一些,因为 PowerShell 提供了既是脚本语言又是 shell 语言的灵活性。PowerShell 旨在最大限度地减少 shell 的键入工作,正如人们在 shell 语言中所期望的那样,但同时,它可以与 PowerShell 脚本完全互操作。

我实际上开始在这里写一个详细的答案,但它越来越大,直到它变成一篇文章长度的故事加上一个弹出式挂图(如下所示的片段),所有这些都发布在 Simple-Talk.com 上。请参阅何时在 PowerShell 中引用

在此处输入图像描述

于 2015-09-23T21:47:56.697 回答