Я не совсем понимаю, как PowerShell анализирует команды и нуждается в вашей помощи.
Я прочитал следующее объяснение от about_parsing документации Microsoft:
Когдаобрабатывая команду, анализатор PowerShell работает в режиме выражения или в режиме аргумента:
В режиме выражения значения строки символов должны быть заключены в кавычки.Числа, не заключенные в кавычки, обрабатываются как числовые значения (а не как последовательность символов).
В режиме аргумента каждое значение обрабатывается как расширяемая строка, если только оно не начинается с одного из следующих специальных символов:знак доллара ($), знак (@), одинарная кавычка ('), двойная кавычка (") или открывающая скобка (().
Если перед одним из этих символов стоит значениеобрабатывается как выражение значения.
Я понимаю, что при разборе команды PowerShell использует либо режим выражения, либо режим аргумента, но я не совсем понимаю следующие примеры.
$a = 2+2
Write-Output $a #4(int), expression mode
Write-Output $a/H #4/H(str), argument mode
Интересно, PowerShell сначала расширяет переменную, а затем решает, какой режим при разборе, но так ли это?
Если это так, есть еще один вопрос о типе данных.Первая команда выдает целое число, а вторая - нет. Почему целое число 4
может быть помещено рядом со строкой /H
?
Я пробовал этот примери это сработало.Кажется, переменные превращаются в строку независимо от типа данных, когда они раскрываются.Это правильно?
$b = 100
Add-Content C:\Users\Owner\Desktop\$b\test.txt 'test'
Я ценю вашу помощь.
Отредактировано, чтобы прояснить ситуацию после получения комментария
Я получилкомментарий о том, что оба примера записи-вывода являются аргументным режимом, поэтому примеры можно интерпретировать следующим образом?
запись-вывод "$ a"
запись-вывод "$ a/ H "
Мне очень жаль слишком двусмысленный вопрос, но я хочу знать:
В режиме аргументов двойные кавычки опускаются?
Примеры записи-вывода процитированы из документа Microsoft, который я связал, и в нем говорится, что первый пример дает интеграл, но не так ли?