Моя команда powershell ниже
$BUILD_SOURCEVERSIONMESSAGE= (Get-Item Env:\BUILD_SOURCEVERSIONMESSAGE)
возвращает вывод в этом формате
2018-10-26T01:08:44.7409834Z BUILD_SOURCEVERSIONMESSAGE Merge 569594f057e2c4bd0320159855e81e14216ca66f into 41107d0f0db5ef2986831db2182280e0c...
Я пытаюсь разобрать строку 569594f057e2c4bd0320159855e81e14216ca66f из вывода выше.
Я попытался преобразовать вывод в строку, разделив ее на пробелы и получив доступ ко второму элементу массива следующим образом. Однако я получаю пустую строку. Как я могу получить доступ к требуемой строке?
echo $BUILD_SOURCEVERSIONMESSAGE
$out = $BUILD_SOURCEVERSIONMESSAGE | Out-String
$out1 = $out.split()
echo $out1[1]
Краткий эквивалент команды Get-Item Env:\BUILD_SOURCEVERSIONMESSAGE
, т. Е. Получение значения переменной среды BUILD_SOURCEVERSIONMESSAGE
, - это выражение $env:BUILD_SOURCEVERSIONMESSAGE
.
Используя унарную форму оператора Powershell -split
, который разбивает ввод на любые непустые пробелы (с удалением начальных и конечных пробелов), вы можете получить желаемый результат следующим образом:
PS> (-split $env:BUILD_SOURCEVERSIONMESSAGE)[3]
569594f057e2c4bd0320159855e81e14216ca66f
Индекс 3
извлекает токен 4-й, полученный в результате токенизации через -split
.
Если вы хотите использовать интерполяцию строк с результатом:
$prefix = 'before<'; $postfix = '>after'
$val = (-split $env:BUILD_SOURCEVERSIONMESSAGE)[3]
# Output a synthesized string that applies a pre- and postfix, using
# {...} to enclose variable names to avoid ambiguity.
"${prefix}${val}${postfix}"
Вышеуказанное дает:
before<569594f057e2c4bd0320159855e81e14216ca66f>after