gpt4 book ai didi

powershell - 我可以在 Powershell 中命名什么函数?

转载 作者:行者123 更新时间:2023-12-04 11:33:22 31 4
gpt4 key购买 nike

PS > function ]{1}
PS > ]
1
PS >
PS

为什么这行得通?

我还能命名一个函数吗?到目前为止我发现的所有工作都是 *] .

最佳答案

你几乎可以给它起任何名字。您甚至可以在名称中包含换行符和表情符号*。

function Weird`nFunctionの名前😀 { Write-Host hey }
$c = gcm Weird*
$c.Name
& $c

转义有助于解决很多这样的问题:
function `{ { Write-Host cool }
`{

function `0 { Write-Host null }
gci function:\?

我要补充一点,变量也是如此,并且有一种语法可以消除在变量名中进行大部分转义的需要: ${varname} (相对于 $varname )。

有了它,你可以很容易地做到:
${My variable has a first name,
it's
V
A
something
R,
whatever I dunno
🤷} = Get-Process

您会注意到,如果您随后开始键入 $My TAB 它将以可用的方式完成选项卡。

为了(某种程度上)回答为什么这应该起作用,请考虑变量名本身只是存储在.Net字符串中。考虑到这一点,为什么要对名称进行限制?

在某些上下文中如何使用这些名称会有限制,因为如果名称没有转义某些字符,解析器将无法理解如何处理它,但 PowerShell 脚本的文字解析不是唯一的方法使用函数或变量或其他语言结构,正如我展示的一些示例。

减少限制还意味着能够通过广泛支持字符集来支持其他语言和文化。

为此,还有一件事可能会让您感到惊讶:有许多不同的字符来表示我们在代码中认为理所当然的相同或相似的事物,例如引号。

一些(人类)语言或文化只是不使用我们在英语中使用的相同引号字符,甚至没有在键盘上使用它们。如果您必须不断切换键盘布局或使用 ALT 代码引用字符串,那么键入代码会有多烦人?

所以我在这里得到的是 PowerShell 实际上确实支持许多引号字符,例如,你认为这可能会做什么:
'Hello’

很明显,它不是右侧的“正确”引号集。但令人惊讶的是,这很好用,即使它们不是同一个角色。

如果您曾经从用户输入生成代码并希望避免偷偷摸摸的注入(inject)攻击,这确实具有重要意义。

想象你做了这样的事情:
Invoke-Expression "echo '$($userMsg -replace "'","''")'"

看起来您处理了事务,但现在想象一下 $userMsg包含这个:

Hi’; gci c: -recurse|ri -force -whatif;'



对于它的值(value), CodeGeneration类(class)知道这些东西;)
Invoke-Expression "echo '$([System.Management.Automation.Language.CodeGeneration]::EscapeSingleQuotedStringContent($userMsg))'"

* PowerShell 控制台对 Unicode 没有很好的支持,即使该语言支持。使用 ISE 可以更好地查看字符。

关于powershell - 我可以在 Powershell 中命名什么函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135226/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com