巧用Here-String

你或许听过Here-String也有可能在其它地方见过,比如Linux等其它地方。因为Here-String并不是PowerShell中独有的特性,我们很多时候都会把一些未经处理的非格式化数据放入Here-String中,因为Here-String可以用来解析显示大段字符串数据,在特殊的场景下极为有用。

先来看一下在PowerShell中定义Here-String的标准格式:

@<引号>
<内容行>
<内容行>
<内容行>
<内容行>
<内容行>
<引号>@

这里尤其要注意的是格式的排版,必须要按照上面的格式去定义,否则你会看到像下面这样PowerShell就会报一个内容解析错误。
这里写图片描述

你一定要按照这样的格式去定义一个Here-String,起始的@”和内容行以及收尾的“@都不能放在同一行里。
这里写图片描述

现在明白了如何定义格式后,来试试Here-String的效果,最直观的效果就是Here-String可以直接输出你在内容行里定义的一切内容。

当然内容行里所包含的内容不应该仅仅是纯字符串吧,如果写一个变量进去会是什么效果,会不会把我们的变量值解析出来呢?
这里写图片描述
果然猜对了,定义在Here-String里的变量被正常解析了出来。

那如果遇到一种情况是,我就是希望Here-String直接能够输出变量的字面值(也就是变量的本身),而不是变量的值改怎么做呢,还记得文章一开始定义Here-String的格式方法么@<引号><内容行><内容行><引号>@,里面提到了引号,引号有单双引号之分,那么这里只需要把双引号改为单引号就可以了,因为单引号有着所见即所得般的作用效果。
这里写图片描述

其实Here-String除了上面提到的一些本质特性外,可以利用它支持字符串段落显示的特性来做一些字符串处理。假设我们有一组未经处理的字符串信息,这组字符串里包含了一系列计算机名,我把这些字符串放进Here-String里并且复制给一个名为computers的变量。

$computers = @"  
Computer1     
Computer2  
Computer3  
Computer4  
Computer5  
Computer6  
Computer7  
Computer8  
"@   

我想要处理这每一条计算机名并在末尾加上”-test”字符串,于是我用循环的方式给每条计算机名添加指定的后缀信息。

$computers = @"  
Computer1     
Computer2  
Computer3  
Computer4  
Computer5  
Computer6  
Computer7  
Computer8  
"@   

foreach($cn in $computers)  
{  
    $cn+"-test"  
}  

但得到了如下结果,看来单纯的循环遍历肯定是不行的。

Computer1     
Computer2  
Computer3  
Computer4  
Computer5  
Computer6  
Computer7  
Computer8-sh  

聪明的你应该知道原因,因为它是一整块数据,并不是一个个数组元素。所以如果想把它变成数组的话需要做些处理,怎么处理呢?观察下发现了一个特性,那就是每行计算机名都是单独一行,那么我们必须想办法把这块数据分割成一个个数据也就是我们所要的数组元素。

$computers = @"  
Computer1     
Computer2  
Computer3  
Computer4  
Computer5  
Computer6  
Computer7  
Computer8  
"@   

$newComputers = ($computers -split "`n")  

这里用split参数配合”`n”来告诉PowerShell我打算以回车为分隔来识别每一条数据,现在再来用GetType()方法看看,它已经是一个标准的数组对象了:

IsPublic IsSerial Name       BaseType                                                                                                                              
-------- -------- ----       --------                                                                                                                              
True     True     String[]   System.Array   

最后修改之前的遍历循环方法,相信就能得到我们想要的结果了。

$computers = @"  
Computer1     
Computer2  
Computer3  
Computer4  
Computer5  
Computer6  
Computer7  
Computer8  
"@   

$newComputers = ($computers -split "`n")  

foreach($cn in $newComputers)  
{  
    $cn+"-sh"  
}  

就是这样。

Computer1-test
Computer2-test
Computer3-test  
Computer4-test  
Computer5-test  
Computer6-test  
Computer7-test  
Computer8-test  

Here-String的用法非常简单,只需要记住两个@<引号>和<引号>@一定不能再同一行声明。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值