Powershell Использование Backtick для новых линий - странность - PullRequest
2 голосов
/ 25 августа 2010

Что именно происходит в примере 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 ]

2 голосов
/ 25 августа 2010

В первом примере вы можете удалить обратную галочку, поскольку Powershell знает, что строка будет продолжена (есть знак +).

Что шикарно делает

  1. принимает строку "aaaa, aaaa ..." (1) из первого
  2. вычисляет выражение с разбиением - возвращает массив строк (из "aaaa,...aaaa".Split(','))
  3. преобразует массив строк в строку, которая снова возвращает строку "aaaa, ... aaaa"
  4. добавляет результаты из 1. и 3.

Примечание: когда шикарный конвертирует массив в строку, он использует $ofs переменную. Вы увидите это лучше в действии, когда попробуете этот код:

$ofs = "|"
[String]::Join(",", ("aaaaa,aaaaa" + "bbbb,bbbb,bbbb".Split(',') | foreach { ('"' + $_ + '"') }))  
1 голос
/ 25 августа 2010

В вашем первом примере метод Split применяется только ко второй строке a.Скобки необходимы для порядка операций.В первом примере метод Split выполняется перед объединением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...