将一个(字符串)变量设置为等于另一个(字符串)变量,包括修改

Setting a (string) variable equal to another (string) variable including modifications

我正努力在 可重用 PowerShell(v5.1,但与 v 无关)大规模编写库脚本方面做得更好,我有一个非常简单的任务我'将用于说明。来自 C# 的伪代码从另一个创建一个变量,有一些变化看起来像

string somevar = "foo";
string someothervar = DoSomethingTo(somevar); // lots of variations HERE
Debug.Print someothervar;

假设这是一个简单的 replace 操作。我不会费心用 C#(或 PoSh)编写它,但由于它基本上是一种脚本语言,我能找到的每个博客或文档类型的示例 replace 看起来都像

> $somevar = "foo"
> {# here are 3 ways to say replace in PowerShell}
> # here is some console output of what happens when you do that

我不关心控制台输出。我关心的是了解 all PowerShell-native 我可以在 [=15= 上使 $someothervar 停止运行的方法],例如替换其中的一部分。 (我知道我基本上可以调用 .NET。)

如果我以更糟糕的方式问这个问题,它会类似于“如何使用其他 PowerShell 变量 and/or 参数在内联操作中设置本地 PowerShell 变量”。

在 PowerShell 中,任何输出都可以分配给一个变量。如果未分配或以其他方式使用,它将输出到主机,通常是控制台。

您从伪代码派生的示例可能类似于:

$SomeOtherVar = $SomeVar -replace "one", "two"

如果您对字符串调用 .Net 方法,情况也是如此:

$SomeOtherVar = $SomeVar.Replace( "one", "two" )

分配命令的输出也很重要,它可以是 cmdlet、函数甚至是命令行可执行文件。

注意:调用函数和 cmdlet 在 PowerShell 中略有不同。不要在括号中指定参数。用空格分隔参数和参数 and/or 使用命名参数。

$SomeOtherVar = Get-SomeData $SomeVar

$SomeOtherVar = Ping $SomeVar

您问题的简要答案是任何 PowerShell 输出都可以分配给变量。因此,即使输出为空,您对 $SomeVar 所做的任何生成输出的字面意思都可以分配给 $SomeOtherVar

回复评论/附加示例:

$SomeVar = 'foo'
$SomeOtherVar = $SomeVar -replace 'foo', 'bar'
$SomeOtherVar

输出:bar

所以我觉得这个 post 有点令人困惑和有趣。史蒂文的回答很好,但似乎没有通过某种方式得到通过,所以我会尝试只在那里扔一些代码并希望能坚持下去。如果没有,至少我试过了对吧?

function Append-BarToString {
    param(
        [string]$InputString
    )
    # explicit return keyword not needed.  
    # Any output inside function not assigned  
    # to a variable or to $null will be sent out
    $InputString + "Bar" 
}

# function can also be written without param block 
# more like C# like this, though it is unconventional
function Append-BarToString ([string]$InputString)
{
    # $InputString + "Bar"
    # or 
    "${InputString}Bar"
}

$someVar = 'foo'
$someOtherVar = Append-BarToString $someVar


$someOtherVar
# or
Write-Host $someOtherVar

# output
# fooBar
# fooBar