热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我允许在Powershell中命名一个函数?

如何解决《我允许在Powershell中命名一个函数?》经验,为你挑选了1个好方法。

几乎任何东西都可以命名.您甚至可以在名称中包含换行符和表情符号*.

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

你会注意到,如果你开始打字$MyTAB,它将以可用的方式完成标签.


为了(有些)回答为什么这应该工作,考虑变量名称本身只存储在.Net字符串中.考虑到这一点,为什么名称会有限制?

上限值如何这些名称的一部分可以在某些情况下使用,因为解析器会不明白什么用它做,如果名称不具有一定的转义字符,但PowerShell脚本的字面解析是不是唯一的方法使用函数或变量或其他语言结构,我已经展示了一些例子.

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

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

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

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

'Hello’

很明显,这不是右侧的"正确"报价集.但令人惊讶的是,这种方法效果很好,即使它们不是同一个角色.

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

成像你做了这样的事情:

Invoke-Expression "echo '$($userMsg -replace "'","''")'"

看起来你照顾生意,但现在想象如果$userMsg包含这个:

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

对于它的价值,CodeGeneration班级知道这些东西;)

Invoke-Expression "echo '$([System.Management.Automation.Language.CodeGeneration]::EscapeSingleQuotedStringContent($userMsg))'"

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



1> briantist..:

几乎任何东西都可以命名.您甚至可以在名称中包含换行符和表情符号*.

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

你会注意到,如果你开始打字$MyTAB,它将以可用的方式完成标签.


为了(有些)回答为什么这应该工作,考虑变量名称本身只存储在.Net字符串中.考虑到这一点,为什么名称会有限制?

上限值如何这些名称的一部分可以在某些情况下使用,因为解析器会不明白什么用它做,如果名称不具有一定的转义字符,但PowerShell脚本的字面解析是不是唯一的方法使用函数或变量或其他语言结构,我已经展示了一些例子.

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

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

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

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

'Hello’

很明显,这不是右侧的"正确"报价集.但令人惊讶的是,这种方法效果很好,即使它们不是同一个角色.

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

成像你做了这样的事情:

Invoke-Expression "echo '$($userMsg -replace "'","''")'"

看起来你照顾生意,但现在想象如果$userMsg包含这个:

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

对于它的价值,CodeGeneration班级知道这些东西;)

Invoke-Expression "echo '$([System.Management.Automation.Language.CodeGeneration]::EscapeSingleQuotedStringContent($userMsg))'"

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


推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
author-avatar
海伦国际官2502862377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有