tl; dr :
Чтобы создать дословную многострочную строку (т. Е. Строку с буквальным содержанием ), используйте одиночные кавычки здесь-строка:
$multiLineScript2 = @'
$startDate2 = (get-date).AddDays($resultOfSubtraction).ToShortDateString();
$endDate2 = (get-date).AddDays($resultOfSubtraction + 1).ToShortDateString();
'@
Обратите внимание на использование @'
и '@
в качестве разделителей.
Используйте double* цитируется здесь-строка, только если необходимо расширение строки (интерполяция) (и, если необходимо, выборочно предотвращение расширения путем экранирования $
как `$
).
Get-Help about_quoting rules
обсуждает типы строковых литералов, поддерживаемых PowerShell :
Чтобы получить строка с литерал содержимое (без интерполяции, что C # будет называть дословной строкой), используйте одинарные кавычки : '...'
Чтобы получить расширяемую строку (интерполяция строки), т. Е. Строку, в которую могут быть встроены ссылки на переменные и выражения, которые заменяются их значениями при присваивании, используйте DOUBLкавычки : "..."
- Чтобы выборочно подавить расширение, backtick-escape
$
chars .;Например, чтобы предотвратить интерполяцию $var
(развернутое до ее значения) внутри строки "..."
, используйте `$var
. - . Для обзора правил раскрытия строки см. этот ответ.
Оба основных типа также доступны как здесь-строки - в формах @'<newline>...<newline>'@
и @"<newline>...<newline>"@
соответственно (<newline>
обозначает фактическую новую строку (разрыв строки)) - что облегчает определение многострочных строк .
- Важно :
- Ничто (кроме пробелов) не должно следовать за открывающим разделителем -
@'
или @"
- в той же строке - содержимое строки должно быть определено в после lines. - Закрывающий разделитель -
'@
или "@
(соответствует открывающему разделителю) - должен быть в самом начале строки .
Примеры:
# Single-quoted: literal:
PS> 'I am $HOME'
I am $HOME
# Double-quoted: expandable
PS> "I am $HOME"
I am C:\Users\jdoe
# Here-strings:
# Literal
PS> @'
I am
$HOME
'@
I am
$HOME
# Expandable
PS> @"
I am
$HOME
"@
I am
C:\Users\jdoe