【问题标题】:Dynamic string parsing in PowershellPowershell 中的动态字符串解析
【发布时间】:2011-02-17 21:41:19
【问题描述】:

我正在尝试用 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 重新解析字符串。

谢谢!

【问题讨论】:

    标签: parsing powershell


    【解决方案1】:
    【解决方案2】:

    我写了一个 convertto-herestring 函数来做这件事:

     $foo = "Rock on"
     '$foo with your bad self.' | out-file message.txt
    
     function convertto-herestring { 
     begin {$temp_h_string = '@"' + "`n"} 
     process {$temp_h_string += $_ + "`n"} 
     end { 
         $temp_h_string += '"@' 
         iex $temp_h_string 
        } 
    } 
    
      gc message.txt | convertto-herestring
    
      Rock on with your bad self.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2016-08-24
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      相关资源
      最近更新 更多