Powershell-F格式操作符-创新互联
今天跟网友扯淡,网友给了两行代码,可以输出以下的效果
创新互联主营沈丘网站建设的网络公司,主营网站建设方案,APP应用开发,沈丘h5微信平台小程序开发搭建,沈丘网站营销推广欢迎沈丘等地区企业咨询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 X $_=$($i*$_)"};$a+="`r`n"}{$a}
第一眼看上去,老实承认真没看懂这两行怎么工作的,仔细学习了一会,终于明白了逻辑关系。
这两行代码主要利用的是PowerShell 里面利用-F的格式操作符。
参考资料如下
http://ss64.com/ps/syntax-f-operator.html
这个操作符主要有2个表达形式:
表达形式1
"String with placeholders" -f "Array of values to place into the placeholders"
比如说
Get-ChildItem c:\temp | ForEach-Object {'Filename: {0} Created: {1}' -f $_.fullname,$_.creationtime}
可以看见Filename的名字分配给了 fullname这个属性;而Created分配给了creationtime这个属性
表达形式2, I表示位置,A表示空格位置,负数表示右边加空格,正数表示左边加空格,FS是一些格式选项,比如HEX进制,百分比等等。
"{I,A:FS} {I,A:FS} {I,A:FS}.." -f "string0", "string1", "string2"...
上面提到的两个例子主要就是利用了第二种表达方式。现在来仔细看看。
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..9 | %{$a=""}{for ($i=1;$i -le $_;$i++){$a+="{0,-7}" -f " $i X $_=$($i*$_)"};$a+="`r`n"}{$a}
这个例子的思路也很相似。管道传入每一个数字,分别列出来,{0,-7}表示的就是在当前输出字符串右边加7个空格而已;注意这个例子里面他初始化创建的$a是一个空字符串,因此加进去的时候每一个元素他不会像数组一样自动换行,作者在每次循环结束加了个回车换行符。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:Powershell-F格式操作符-创新互联
标题URL:http://azwzsj.com/article/phpso.html