将一个(字符串)变量设置为等于另一个(字符串)变量,包括修改
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
我正努力在 可重用 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