Пытаясь избежать двойной кавычки рядом с запятой в PowerShell, обычный метод не работает.
Я заменяю текст с помощью PowerShell, работающего в пакетном файле, используя одинарные кавычки для заключения заменяемого текста.
Я обнаружил, что попытка избежать запятой, за которой следует двойная кавычка, не может быть выполнена обычным способом.
Символ сам по себе экранируется с помощью","
Символ сам по себе экранируется с помощью""""
Вышеупомянутое работает, если и не находятся рядом друг с другом, но если они находятся вот так...
",
Использование этого для экранирования обоих символов не работает:
'""""","'
Это четыре двойные кавычки, чтобы избежать"
персонаж, затем еще два, чтобы избежать,
символ, заключенный в одинарные кавычки.
Пожалуйста, не предлагайте использовать PowerShell отдельно, я хочу оставить все как есть, запускать из командного файла.
Все остальное работает отлично, вот и все",
проблема.
Ваше здоровье.
2 ответа
В Powershell вы можете использовать строки двумя способами.
"...."
и'....'
.
Когда вы используете первый, второй символ кавычки не обязательно экранировать. Если вы используете второй, первый символ кавычки не нужно экранировать. Например:"This is a 'test'"
и'This is a "test" too.'
Кроме того,'...'
это буквальный текст, поэтому'$test'
буквально распечатаю$test
тогда как"$test"
напечатает все, что находится в переменной $test.
Экранирование строки можно выполнить несколькими способами:\"
это такой способ."This is a test $('"') too"
Другой.
Я считаю, что обычно полезно использовать то, что выглядит лучше всего, в зависимости от окружающего его кода.
Поскольку вы комбинируете пакетный сценарий и PowerShell, "" будет работать, поскольку это пакетный способ выхода", но это даст странные результаты, и рекомендуется не использовать это. Поэтому рекомендуется вообще не использовать пакетный режим и делать все, что угодно. непосредственно в PowerShell.
Хорошо, я разобрался с этим, нужно удалить последнюю двойную кавычку, что кажется мне странным, потому что нарушает правила экранирования специальных символов, но это то, что работает. Возможно, это потому, что я запускаю PowerShell в пакетном файле (где обратная галочка бесполезна, хотя я использую PowerShell).
'"""",'
Это также работает, когда после запятой снова есть символы.
Например, для этого подойдет приведенное выше:
some text", then some more text
Меняем это на это:
some text then some more text