我绝对不会在这里得到一些东西:
我正在创建一个简单的函数来复制字符串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”部分,这样我就可以获得固定数量的重复。当我这样做时,我得到以下输出(没有引号):
Repeat-String(“x”,7)
“x 7x 7x 7x 7x 7”
它看起来好像是连接$ str和$ repeat参数,而不是像2个独立的参数那样对它们进行处理。我做错了什么?
答案 0 :(得分:17)
问题是您需要将代码转换为以下内容
Repeat-string "x" 7
在PowerShell中,每当你在()中放入一组值时,就会创建一个数组。这意味着在您的示例中,您实际上是将一个数组作为单个参数传递给函数。
答案 1 :(得分:6)
这是一种更好的方法,只需将你的(任意)字符串乘以N次重复:
PS > function Repeat-String([string]$str, [int]$repeat) { $str * $repeat }
PS > Repeat-String x 7
xxxxxxx
PS > Repeat-String JMarsch 3
JMarschJMarschJMarsch
答案 2 :(得分: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: A Study in PowerShell Pipelines, Functions, and Parameters讨论了上述陷阱以及函数调用接口的许多其他细微差别。例如,我的文章的一部分涵盖了以下所有函数 f 之间的微妙差异,其中大部分将不产生您期望的结果。
f(1,2,3)
f (1,2,3)
f 1,2,3
f (1 2 3)
f 1 2 3
查找文章附带的方便的挂图参考文献的PDF下载。
这是一个缩略图:
(哦,你可能还想查看Give a man a fish...上面经典引语的幽默副产品清单
答案 3 :(得分:0)
当然JaredPar是对的。
我也喜欢使用内置范围函数..
:(注意我从1开始而不是0)
Function Repeat-String([string]$str, [int]$repeat) {
$builder = new-object System.Text.StringBuilder
1..$repeat | %{ [void]$builder.Append($str) }
return $builder.ToString()
}
Repeat-string "x" 7