Powershell удаляет запятую из аргумента программы
Я хочу передать список разделенных запятыми значений в script как часть одного коммутатора.
Вот программа.
param(
[string]$foo
)
Write-Host "[$foo]"
Вот пример использования
PS> .\inputTest.ps1 -foo one,two,three
Я ожидал бы, что выход этой программы будет "[один, два, три]", но вместо этого он возвращает "[один два три]". Это проблема, потому что я хочу использовать запятые для разграничения значений.
Почему powershell удаляет запятые и что мне нужно изменить, чтобы их сохранить?
Ответы
Ответ 1
Запятая представляет собой специальный символ в powershell для обозначения разделителя массива.
Просто поставьте аргументы в кавычки:
inputTest.ps1 -foo "one, two, three"
В качестве альтернативы вы можете "процитировать" запятую:
inputTest.ps1 -foo one`,two`,three
Ответ 2
Вставьте его в кавычки, чтобы он интерпретировал его как одну переменную, а не список из трех:
PS > .\inputTest.ps1 -foo "один, два, три"
Ответ 3
Доступны следующие варианты
-
Цитаты вокруг всех аргументов (')
inputTest.ps1 -foo 'one,two,three'
-
Символ escape-символов Powershell перед каждой запятой (grave-accent (`))
inputTest.ps1 -foo one`,two`,three
Двойные кавычки вокруг аргументов ничего не меняют!
Одиночные кавычки устраняют расширение.
Символ Escape (серьезный акцент) исключает расширение следующего символа
Ответ 4
если вы передаете параметры из пакетного файла, а затем введите ваши параметры, как показано ниже
"" Param1, Param2, Param3, Param4 "" "