【问题标题】:powershell: how to evaluate a stringpowershell:如何评估字符串
【发布时间】:2021-05-17 22:59:02
【问题描述】:

文件 a.txt 是:

从 test_$suffix 中删除

$a=get-content a.txt

$suffix="tableA"

如何操作变量以将其设置为

从 test_tableA 中删除

【问题讨论】:

    标签: powershell eval


    【解决方案1】:
    $a=get-content a.txt
    $suffix="tableA"
    
    $ExecutionContext.InvokeCommand.ExpandString($a)
    

    【讨论】:

    • 请注意,如果 $a 包含带引号的字符串(例如 $a = 'delete from "test_$suffix"'),当它展开时,您将丢失引号。
    • 确实如此。 $ 符号也是如此。你可以用勾号`来转义它们。此外,此处的字符串技术仅允许可识别的 PowerShell 行。我不能在文件中包含“这是文本”(不带引号)。在进行模板类型应用程序时启用它很有用。
    • 我不明白这部分:“此外,这里的字符串技术只允许可识别的 PowerShell 行。我不能在文件中包含“这是文本”(没有引号)。启用它是在进行模板类型应用程序时很有用。” mjolinor.wordpress.com/2011/02/02/here-string-test
    • 抱歉,我测试的 testfile.txt 是从 ISE 保存为 Unicode,我将它重新保存为 Ascii 并且它有效。
    • 没问题。我曾经有过一些时候,我认为我比我更了解事情,并且做出的陈述完全是错误的。我讨厌这样做,并想确定这不是那个时代。
    【解决方案2】:

    Invoke-Expression 是等价的。

    $strExpression = "5 + 5 -eq 10"
    Invoke-Expression $strExpression
    True
    

    更多信息请参见http://technet.microsoft.com/en-us/library/ee176880.aspx

    【讨论】:

    • 谢谢你,接受的答案对我不起作用,它只是回应了变量内容。您的答案效果很好,甚至更短
    【解决方案3】:

    这是一种方法。双引号 here-string 中的变量会自动替换。请确保您的输入文件符合此处字符串的 PS 规则。

     function convertto-herestring { 
     begin {$temp_h_string = '@"' + "`n"} 
     process {$temp_h_string += $_ + "`n"} 
     end { 
         $temp_h_string += '"@' 
         iex $temp_h_string 
         } 
     } 
    
     $suffix = "tableA"
    
     get-content testfile.txt
    
     delete from test_$suffix
    
     get-content testfile.txt | convertto-herestring
    
     delete from test_tableA
    

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2022-01-25
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2019-10-04
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多