代码之家  ›  专栏  ›  技术社区  ›  leeand00

当使用在powershell中通过引用传递的字符串时,如何访问它的值?

  •  0
  • leeand00  · 技术社区  · 6 年前

    $A="Something"
    

    $A.Value="Something"
    

    我知道只有当 .Value

    function main
    {
        $A="Original A"
        $B="Original B"
    
        SetByRef1 ([ref]$A)
        SetByRef2 ([ref]$B)
    
        $A
        $B
    
        #output: Changed A
        #output: Original B
    }
    
    
    function SetByRef1([ref]$A)
    {
        $A.Value = "Changed A"
    }
    
    function SetByRef2([ref]$B)
    {
        $B = "Changed B"
    }
    
    main
    

    我想,那 $B = "Changed B" 定义了一个新的变量B,而 $A.Value = "Changed A"

    (我确定这是一个副本,但我没有找到它)

    0 回复  |  直到 10 年前
        1
  •  5
  •   Matt    10 年前

    .Value About_Ref

    PS C:\ps-test> function double
    >> {
    >>     param ([ref]$x) $x.value = $x.value * 2
    >> }
    

    如果你在函数内部检查对象,你可以看到区别。函数内部 SetByRef1 我加了以下几行。

    $a.GetType().FullName
    $a.value.GetType().FullName
    

    System.Management.Automation.PSReference`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
    System.String
    

    类型 $a.value 显示您正在对原始对象执行操作。