参数和PowerShell函数

JMa*_*sch 5 powershell

我绝对不会在这里得到一些东西:

我正在创建一个简单的函数来复制字符串x次.我对参数有一些奇怪的问题 - 它似乎没有识别第二个参数.当我运行该函数时,它返回一个空字符串.此外,我认为它将2个参数归为1.这是我的代码:


Function Repeat-String([string]$str, [int]$repeat) {
  $builder = new-object System.Text.StringBuilder
  for ($i = 0; $i -lt $repeat; $i++) {[void]$builder.Append($str)}
  $builder.ToString()
}

首先我点源它加载它:

. .\RepeatString.ps1

然后我像这样执行它:

Repeat-string("x", 7)
我期待一串7 x的.我有一个空字符串.

我又去了一些,我改变了"for"循环.我用"-lt 5"替换了"-lt $ repeat"部分,这样我就可以获得固定数量的重复.当我这样做时,我得到以下输出(没有引号):

重复字符串("x",7)

"x 7x 7x 7x 7x 7"

它看起来好像是连接$ str和$ repeat参数而不是像2个独立的参数那样对待它们.我究竟做错了什么?

Jar*_*Par 17

问题是您需要将代码转换为以下代码

Repeat-string "x" 7
Run Code Online (Sandbox Code Playgroud)

在PowerShell中,每当你在()中放入一组值时,就会创建一个数组.这意味着在您的示例中,您实际上是将一个数组作为单个参数传递给该函数.


Sha*_*evy 6

这是一个更好的方法,只需将你的(任意)字符串乘以N次重复:

PS > function Repeat-String([string]$str, [int]$repeat) {  $str * $repeat }
PS > Repeat-String x 7
xxxxxxx

PS > Repeat-String JMarsch 3
JMarschJMarschJMarsch
Run Code Online (Sandbox Code Playgroud)


Mic*_*ens 6

一句着名的中国谚语说:

"给一个人喂一条鱼,你喂他一天.教一个人钓鱼,你喂他一辈子."

对于你们中间的世界主义者而言,原作是?????????? 和拼音罗马化Shòu rén y? yú bùrú shòu rén y? yú.(我一直在学习说一些普通话和写拼音,所以我必须练习!奇怪的是我发现上面的拼音表达似乎是一个谜,但这是另一个故事... :-)

现在到了我的观点: JMarsch遇到了一个常见的PowerShell陷阱,可能会使任何习惯于使用"常规"语言的人绊倒,而@JaredPar提供了正确的解决方案.不过,我提出,答案类似于在你面前拍打鱼!

刚刚发布在Simple-Talk.com上,Down the Rabbit Hole:PowerShell管道,函数和参数的研究讨论了上述陷阱以及函数调用接口的许多其他细微差别.例如,我的文章的一部分涵盖了对函数f的所有以下调用之间的细微差别,其中大部分都不会产生您期望的结果.

f(1,2,3)
f (1,2,3)
f 1,2,3
f (1 2 3)
f 1 2 3
Run Code Online (Sandbox Code Playgroud)

查找文章附带的方便的挂图参考的PDF下载.

这是一个缩略图: PowerShell函数快速参考

(哦,你可能还想看看上面经典引用的幽默分拆列表给人一条鱼......)