Я пытаюсь сделать что-то необычное с анализом Powershell. По сути, у меня есть литеральная строка, которая содержит имя переменной. Что я хотел бы сделать, так это сказать powershell: «Эй, у меня есть строка, которая (может) содержать одно или несколько имен переменных - динамически анализировать ее, заменяя имена переменных их значениями» *
Вот учебник, как я понимаю парсинг работает:
PS C:\> $foo = "Rock on"
PS C:\> $bar = "$foo"
PS C:\> $bar
Rock on
А если я сейчас изменю значение на $ foo:
PS C:\> $foo = "Rock off"
PS C:\> $bar
Rock on
Здесь нет сюрпризов. Значение $ bar было проанализировано в том виде, в котором оно было присвоено, и не изменилось просто потому, что изменилось значение $ foo.
Хорошо, а что, если мы назначим $ bar одинарной кавычкой?
PS C:\> $foo = "Rock on"
PS C:\> $bar = '$foo'
PS C:\> $bar
$foo
Это здорово, но есть ли способ заставить Powershell анализировать его по требованию? Например:
PS C:\> $foo = "Rock on"
PS C:\> $bar = '$foo'
PS C:\> $bar
$foo
PS C:\> Some-ParseFunction $bar
Rock on
PS C:\> $foo = "Rock off"
PS C:\> Some-ParseFunction $bar
Rock off
Почему я хочу это сделать? Я хотел бы иметь возможность получать содержимое из файла (или некоторого источника данных) и динамически анализировать его:
PS C:\> $foo = "Rock on"
PS C:\> '$foo with your bad self.' | out-file message.txt
PS C:\> $bar = (get-content message.txt)
PS C:\> $bar
$foo with your bad self.
PS C:\> Some-ParseFunction $bar
Rock on with your bad self.
Можно ли это сделать? Я понимаю, что мог бы выполнить какое-то сопоставление с шаблоном для поиска / замены известных имен, но я бы предпочел, чтобы Powershell повторил строку.
Спасибо!