Переменные хранилища Powershell в переменную не работают - PullRequest
0 голосов
/ 24 октября 2019

Мне нужна помощь с Powershell, надеюсь, кто-нибудь может помочь.

Я хочу сохранить несколько переменных в одной переменной.

Вот мой код:

$Content = @"
$Var1 = "1"
$Var2 = "2"
$Var3 = "3"
"@   

echo $Content

И вот мой вывод:

echo $Content
 = "1"
 = "2"
 = "3"

Это должно выглядеть так:

$Var1 = "1", etc...

Нокаждая переменная удаляется. Я не знаю почему. Может кто-нибудь объяснить это? Нужно ли хранить их в чем-то похожем на объект?

Заранее спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Самое быстрое решение для вашей ситуации - переключиться на здесь строку, заключенную в одинарные кавычки.

$Content = @'
$Var1 = "1"
$Var2 = "2"
$Var3 = "3"
'@ 

Как правило, двойные кавычки вокруг строки указывают PowerShell на интерполяцию. Одинарные кавычки вокруг строки говорят PowerShell обрабатывать содержимое как буквенную строку. Это также относится к здесь-строкам (@""@ и @''@).

# Double Quotes

$string = "my string"
"$string"
my string

@"
$string
"@
my string

# Single Quotes

'$string'
$string

@'
$string
'@
$string

Когда происходит интерполяция, переменные раскрываются и оцениваются. Переменная идентифицируется, начиная с символа $, пока не будет прочитан недопустимый символ для имени переменной. Обратите внимание на приведенный ниже пример, как интерполяция переменной останавливается на ..

"$string.length"
my string.length

Вы можете использовать escape-символы или другие операторы для управления интерполяцией внутри строк в двойных кавычках. Оператор подвыражения $() позволяет вычислить выражение до его преобразования в строку.

"$($string.length)"
9

Символ обратного хода является escape-символом PowerShell. Его можно использовать для экранирования $, если вы не хотите, чтобы его обрабатывали как переменную.

"`$string"
$string

Смешивание кавычек может создать определенные ошибки. Если вы окружите свою строку одинарными кавычками, все внутри будет литеральной строкой независимо от использования escape-символов или подвыражений.

'"$($string.length)"'
"$($string.length)"

'"`$string"'
"`$string"

Окружение вашей строки двойными кавычками с внутренними одинарными кавычками будет просто обрабатывать внутренние одинарные кавычки буквально, потому что внешние кавычки определяют, как будет интерпретироваться строка.

"'$string'"
'my string'

Использование нескольких пар одинарных или двойных кавычек требует особого подхода. В этой уникальной ситуации для двойных кавычек вы можете использовать обратную косую черту или две ", чтобы напечатать одну ".

"""$string"""
"my string"

"`"$string`""
"my string"

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

'''$string'''
'$string'

Пожалуйста, обратитесь к About_Quoting_Rules для получения официальной документации.

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