Powershell -F 格式操作符

简介:

今天跟网友扯淡,网友给了两行代码,可以输出以下的效果

1
2
1..9 | %{ $a =@()} { $a +=$( "{0}{1}{0}"  -f  ( " "  * (9- $_ )),( "$_"  * (2* $_ -1)))}{ $a [0..8+7..0]} 
1..9 | %{ $a =" "}{for ($i=1;$i -le $_;$i++){$a+=" {0,-7} " -f "    $i  $_ =$( $i * $_ ) "};$a+=" `r`n"}{ $a }


wKiom1c6uiCBv4yJAABm3LRPrpA884.png


第一眼看上去,老实承认真没看懂这两行怎么工作的,仔细学习了一会,终于明白了逻辑关系。

这两行代码主要利用的是PowerShell 里面利用-F的格式操作符。

参考资料如下

http://ss64.com/ps/syntax-f-operator.html


这个操作符主要有2个表达形式:


表达形式1

"String with placeholders" -f "Array of values to place into the placeholders"

比如说

1
Get-ChildItem  c:\temp |  ForEach-Object  { 'Filename: {0} Created: {1}'  -f  $_ .fullname, $_ .creationtime}

可以看见Filename的名字分配给了 fullname这个属性;而Created分配给了creationtime这个属性

wKioL1c6vHGhH7nTAACTVJokZFQ600.png


表达形式2, I表示位置,A表示空格位置,负数表示右边加空格,正数表示左边加空格,FS是一些格式选项,比如HEX进制,百分比等等。

 "{I,A:FS} {I,A:FS} {I,A:FS}.." -f "string0", "string1", "string2"...


上面提到的两个例子主要就是利用了第二种表达方式。现在来仔细看看。


1
1..9 | %{ $a =@()} { $a +=$( "{0}{1}{0}"  -f  ( " "  * (9- $_ )),( "$_"  * (2* $_ -1)))}{ $a [0..8+7..0]}


金字塔的基本原理都知道,算好每一行的空格和数字数量,然后写循环就行。

首先 1到9 通过管道传入,然后对于每一个数字,他创建了一个数组,{0}{1}{0} 对应后面提供的两个字符串,刚好满足“空格”+"数字"+"空格“这个格式。{0}对应的就是(" " *(9-$_)),{1}对应的就是("$_"*(2*$_-1))

累加起来,$a刚好就是金字塔的上半部分。最后通过$a[0..8]输出上半截,$a[7..0]输出下半截~



1
1..9 | %{ $a =" "}{for ($i=1;$i -le $_;$i++){$a+=" {0,-7} " -f "    $i  $_ =$( $i * $_ ) "};$a+=" `r`n"}{ $a }


这个例子的思路也很相似。管道传入每一个数字,分别列出来,{0,-7}表示的就是在当前输出字符串右边加7个空格而已;注意这个例子里面他初始化创建的$a是一个空字符串,因此加进去的时候每一个元素他不会像数组一样自动换行,作者在每次循环结束加了个回车换行符。






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1774329,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
关系型数据库 MySQL Java
PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理
PowerShell【实例 01】-replace替换字符串及特殊字符处理(括号+百分号%)及utf8bom格式问题处理
52 0
|
3月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
53 0
|
5月前
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
51 0
|
8月前
|
JavaScript Windows
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
|
8月前
|
Windows
使用PowerShell获取Windows当前锁屏壁纸
使用PowerShell获取Windows当前锁屏壁纸 如果原始图片丢了,用这段代码就可以提取当前锁屏壁纸了!
102 0
|
应用服务中间件 nginx Windows
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
Windows PowerShell 中启动 Nginx 报错解决方案
|
XML 监控 数据格式
利用powershell进行windows日志分析
0x00 前言   Windows 中提供了 2 个分析事件日志的 PowerShell cmdlet:一个是Get-WinEvent,超级强大,但使用起来比较麻烦;另一个是Get-EventLog,使得起来相当简单,可以实时筛选,接下来,我们利用PowerShell 来自动筛选 Windows 事件日志。
2438 0