Powershell使用Backtick进行新线条 - 古怪

时间:2010-08-25 06:12:00

标签: powershell

示例1中发生了什么?这是如何解析的?

    # doesnt split on ,
[String]::Join(",",("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa," + `
"aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa".Split(',') `
| foreach { ('"' + $_ + '"') }))  





#  adding ( ) does work 
[String]::Join(",",(("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa," + `
"aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa").Split(',') `
| foreach { ('"' + $_ + '"') }))  

2 个答案:

答案 0 :(得分:2)

在第一个示例中,您可以删除反引号,因为Powershell知道该字符串将继续(有一个+符号)。

豪华做什么

  1. 从第一个
  2. 获取字符串“aaaa,aaaa ...”(1)
  3. 使用split计算表达式 - 它返回字符串数组(来自"aaaa,...aaaa".Split(',')
  4. 将字符串数组转换为字符串,再次返回字符串“aaaa,... aaaa”
  5. 添加了1和3的结果。
  6. 注意:当posh将数组转换为字符串时,它使用$ofs变量。当您尝试使用此代码时,您会看到更好的操作:

    $ofs = "|"
    [String]::Join(",", ("aaaaa,aaaaa" + "bbbb,bbbb,bbbb".Split(',') | foreach { ('"' + $_ + '"') }))  
    

答案 1 :(得分:1)

您的第一个示例仅将Split方法应用于a的第二个字符串。括号是操作顺序所必需的。 Split方法在第一个示例中的连接之前执行。