2010-08-25 2 views
2

Что происходит exexctly в примере 1? Как это анализируется?Powershell Использование Backtick для новых линий - странность

# 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

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

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

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

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

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

Ваш первый пример имеет метод Split, применяемый ко второй строке a. Круглые скобки необходимы для порядка операций. Метод Split выполняется перед конкатенацией в вашем первом примере.

Смежные вопросы