Как PowerShell определяет, какой режим при разборе? - PullRequest
0 голосов
/ 27 сентября 2018

Я не совсем понимаю, как 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 "

Мне очень жаль слишком двусмысленный вопрос, но я хочу знать:

  1. В режиме аргументов двойные кавычки опускаются?

  2. Примеры записи-вывода процитированы из документа Microsoft, который я связал, и в нем говорится, что первый пример дает интеграл, но не так ли?

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