PowerShell $_ 语法

如何解决PowerShell $_ 语法

this answer 中,作者提出了以下片段:

dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}

我可以理解其中的大部分内容,但我无法搜索最后一部分的文档。搜索的输出通过管道 | 并在 %{}$_ 中使用。

我已经围绕它进行了实验,%{} 是我相信的 for-each 语句,bing search was not effective$_ 也有点神奇:它是一个变量,没有名字,因此立即被消耗?我不太关心 .FullName,我整理的那部分。同样,bing search was not effective,也不在 PowerShell 文档中搜索这些字符序列。

谁能给我解释一下?

解决方法

static void registerClasses() { register<Home>("Home",() => Home()); } 不是“一件事” - 它是两件事:%{}%

{}ForEach-Object cmdlet 的别名:

%

...所以它解析为:

PS ~> Get-Alias '%'
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object

... |ForEach-Object { $_.FullName } 基本上是 PowerShell 的 map function - 它通过管道获取输入并将 ForEach-Object 块中描述的操作应用于每个输入。

{} 是对当前正在处理的管道输入项的自动引用

你可以把它想象成一个 $_ 循环:

foreach($thing in $collection){}

除了我们现在可以将循环放在管道中间并让它产生立即消耗的输出:

1..10 |ForEach-Object { $_ * 10 }
# produces the same output as
foreach($n in 1..10){
    $n * 10
}

1..10 |ForEach-Object { $_ * 10 } |Do-SomethingElse 不是唯一在 PowerShell 中使用 ForEach-Object 自动变量的东西——它还用于管道绑定表达式:

$_

... 以及属性表达式,一种动态属性定义类型,由许多 cmdlet 支持,例如 mkdir NewDirectory |cd -Path { $_.FullName }

Sort-Object

... 1..10 |Sort-Object { -$_ } # sort in descending order without specifying -Descending

Group-Object

... 和 1..10 |Group-Object { $_ % 3 } # group terms by modulo congruence

Select-Object
,

为了补充 Mathias' answer,它很好地解释了特定结构,以及您如何能够/不可能自己发现这些信息,使用 PowerShell 自己的帮助系统:

相关帮助主题和帮助系统的使用

注意:要获得 PowerShell 帮助系统各个方面的概述,只需运行 help

  • %ForEach-Object cmdlet 的内置 alias

    • 使用 Get-Help ForEach-Object 在终端中查看帮助主题。
      • 如果未找到本地主题,您必须通过 Update-Help cmdlet 下载它们。
    • 提示:
      • 添加 -Online 开关以在浏览器中打开主题的(可能是最新的)online version

      • 您可以通过 Get-Help Get-Help(甚至 help help)引导您对 Get-Help 的使用:

        • Cmdlet 特定的帮助位于详细级别:简洁(默认,仅显示语法和概述说明)、-Detailed(包括参数说明和示例命令)和 {{1} }(另外包括技术参数信息和扩展注释)。
        • -Full 只能用于显示示例命令。
        • 使用基于关键字的搜索(见下文),您可以使用 -Examples 参数将结果限制为特定类别的主题。
      • 为方便起见,您还可以使用内置的 -Category function,它用显示分页包装 help 调用(简单地说:通过管道输出到 Get-Help 实用程序)并默认为详细级别 more

  • -Full 是一个 script block literal,一个可以按需调用的任意 PowerShell 代码块:

    • {...} 在本地显示主题; help about_Script_Blocks 前缀表示该主题是一个概念性帮助主题(而不是涵盖特定命令的主题);当您使用 about_ 搜索关键字(见下文)时,您可以(有点模糊地)使用 Get-Help 将结果限制为概念性主题。
    • 注意:在撰写本文时,-Category HelpFile 主题还可以不能通过添加 about_ 直接在线查看 - 请参阅 GitHub issue #13550 - 但很容易用谷歌搜索他们的名字。
  • -Online 是一个 variable,正如 $_ 后跟一个标识符所暗示的那样,更具体地说是一个 automatic (built-in) variable

    • $ 涵盖一般变量。
    • help about_Variables 涵盖自动的。

仅根据符号和别名如何可以/不能发现上述内容:

在网络上搜索符号是出了名的无用。

  • 顺便说一句:同时运行不同的语法结构,例如 help about_Automatic_Variables%,它们之间没有空格(例如 { ... })会构成额外的障碍,因此应该避免。立>

仅使用 PowerShell 的帮助系统来缩小搜索范围会有所帮助,但仅限于程度

  • %{$_.FullName}

    • 因为 % 知道别名,Get-Help 实际上工作正常并直接显示 help % 的帮助主题。
    • ForEach-Object 显示了包括使用脚本块和自动 help % -Examples 变量的示例命令。
  • 即使 $_ 支持基于关键字的搜索搜索基于符号的术语{ {1}} 和 Get-Help 直接没有帮助,因为即使将搜索限制为概念性{}-prefixed主题)与 $_,要么点击次数过多(about_),要么相关主题根本不显示(-Category HelpFile

  • help '$_' -Category HelpFile 可以间接地被发现,如果你已经知道它是一个变量的实例:

    • help '{}' -Category HelpFile 恰好将您直接带到相关(本地)about_Automatic_Variables 主题,
    • $_ 列出以下匹配的主题 help variables -Category HelpFile,``,help variable -Category HelpFile,about_Variable_Provider,about_Automatic_Variables,{{ 1}} 和 about_Preference_Variables
    • 注意:由于 PowerShell 对 wildcard expressions 的普遍支持,您也可以按如下方式执行搜索:about_Remote_Variables - 请务必将 两者都括起来 em> about_Variables 中搜索词的两侧。
  • about_Environment_Variables 可以间接地被发现,如果你已经知道它是一个脚本(代码)的实例


未来的潜在改进:

  • 如果 PowerShell 的帮助系统支持基于符号的重点搜索,那将是一个巨大的改进。

  • 同样,直接查找运算符(例如*regular-expression matching operator)的能力也会很有帮助:

    • GitHub issue #11339 就是这么建议的。

    • 在相关说明中,GitHub issue #11338 建议添加查找 .NET 类型(在线)文档的功能。

    • This answer 包含自定义函数 $_help about_*block*,它们暂时填补了这一空白(也可用作 Gists)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res