PowerShell的双引号

原创 2007年09月27日 10:57:00

 作者: Edengundam(马涛)

今天看病速度真快, 趁着空隙, 我就继续上次没有完成工作, 介绍双引号. 双引号用的地方太多了, 今天我依然会在Bash, Perl和PowerShell之间进行对比, 对比的三个方面没有变化: 变量展开(也被称为: 变量代换, 变量篡改. ), 转义字符, 引号自身.

 
变量代换
转义字符支持程度
双引号自身引用
Bash
允许
允许
注1
Perl
允许
允许
注2
PowerShell
允许
允许
注3

注1: Bash中, 只能使用转义序列来引用双引号, 这里不包括使用反引号或$()两种捕获程序输出的情况.

注2: Perl的双引号中, 转义序列发挥了完全的功能, 具体细节可以参考perldoc或learning perl.

注3: PowerShell中, 可以使用转义序列和连续出现的两个双引号当作一个双引号. 请见例子.

双引号, 是非常有用的工具, 由于支持了变量代换和转义字符的支持(其实PowerShell和Bash还支持另外一种功能, 类似于子表达式求值, 我将单独为大家介绍.). 使得您在组合变量和字符串的连接, 输出格式控制上有了更多的能力.

在看例子之前, 我先介绍我使用引号的习惯, 既然是习惯, 因人而异, 没有对错. 但是, 我相信好的习惯, 是能够避免一些潜在的错误的.

1. 无论使用Bash, Perl, PowerShell, 只要不使用变量代换和转义字符, 只使用单引号;

2. 使用正则表达式时, 表达式如果不复杂, 只使用单引号;

3. 需要控制换行等格式时, 优先使用现有的cmdlet(Bash中使用echo, echo -n等), 尽量少的使用转义字符;

4. 如果需要变量代换等, 尽量使用字符串连接运算符, 并且按照1-3, 尽量避免双引号;

5. 需要嵌入子表达式, 输出类似TAB制表符等字符时, 使用双引号.

我的规则很简单, 因为双引号支持变量展开和转义序列, 这使得字符串的字面值和实际输出是完全不同的. 往往这样的变化对于脚本编写者会造成很多不必要的麻烦, 最大程度的阻止你的脚本进行这两种操作, 将这两种操作放到明面上, 都会降低脚本的错误可能. 以上只是本人的习惯, 在PowerShell中只要使用"+"就可以连接字符串了, 而Bash更简单, 直接连着写就行, 例如echo "This "'is '" A"' Test!'. 好了, 我们现在来看看PowerShell的几个例子吧:

PS C:> $dt = Get-Date
PS C
:> $num = 8250
PS C
:> "试试双引号的变量代换, 变量$num"
试试双引号的变量代换
, 变量8250
PS C
:> "使用转义序列来阻止变量代换, 变量`$num中的值$num"
使用转义序列来阻止变量代换
, 变量$num中的值8250
PS C
:> "看看`t`t制表符TAB啥样子."
看看            制表符TAB啥样子
.
PS C
:> "看看换行吧...`n"
看看换行吧
...


PS C
:> "连续使用两个双引号看看""看到效果了嘛?"
连续使用两个双引号看看
"看到效果了嘛?
PS C:> 
"双引号中使用单引号呢?不需要转义的哦>>'<<"
双引号中使用单引号呢?不需要转义的哦>>
'<<
PS C
:> "今天的日期是$dt"
今天的日期是09
/27/2007 10:46:47

好了, 聪明的大家已经对单引号, 双引号的基本点有了认识, 下一次, 我们再来做真正的纵向对比. 在Bash, Perl, PowerShell中单引号, 双引号进行对比.

此外, 还会为大家介绍Here-String, 这个东西和Bash中的Here-Document类似. 其实你可以把他们当作特殊的转义序列来看待. 下次见^_^

PowerShell的单引号和反引号

作者: Edengundam(马涛)今天思考了很久, WMI对于Windows来说是非常重要的一个工具. 包含了很多特性, 目前我正在看WMI关于事件和WQL的资料. PowerShell在今后也会提...
  • PowerShell
  • PowerShell
  • 2007年09月26日 22:15
  • 2991

PowerShell 查询操作

【搜索列表中的关键字】 ipconfig | Select-String "IP" #查询进程qq的详细信息 Get-Process qq Get-Process qq | format-list...
  • kk185800961
  • kk185800961
  • 2015年10月01日 04:40
  • 1506

PowerShell:引号的美妙

注:本篇文章,未在联系作者以及得到许可的情况下, 禁止以任何形式进行转载。By:Anders      Mail:katrina520@163.com       如下两种写法非常有趣,发挥了引号的功...
  • itanders
  • itanders
  • 2007年09月22日 01:47
  • 1014

PowerShell:雙引號與單引號

輸入:  "2+2 is (2+2)"結果:   2+2 is (2+2) 一般字串 輸入:  "2+2 is $(2+2)"結果:   2+2 is 4 雙引號中會將$開頭的作解析,括號內解析為4 ...
  • itanders
  • itanders
  • 2007年08月07日 23:05
  • 687

在PowerShell中Format-Table无法与其它输出格式命令并用

最近看到有人问起一个问题,关于Powershell输出CSV格式后显示了乱码
  • itanders
  • itanders
  • 2016年05月12日 18:06
  • 989

在PowerShell中操作Excel - 创建一个简单的报表

转自原文: http://blog.vichamp.com/powershell/office/2013/09/19/integrating-microsoft-excel-with-powershe...
  • kwgjbj
  • kwgjbj
  • 2014年02月17日 21:38
  • 2625

PowerShell学习笔记(1)-基础

PowerShell学习笔记(1):基础  前段时间在知乎上得知Windows下的一款强大的命令行工具PowerShell(原谅我刚刚得知)。 其强大的功能,令人惊叹,兴趣盎然,这么优秀的工具值得我去...
  • corfox_liu
  • corfox_liu
  • 2015年09月28日 16:00
  • 488

PowerShell教程

[01]初识PowerShell 作者: Edengundam(马涛) PowerShell的概念性介绍我不太想说得太多, 简单概括几点: ...
  • begtostudy
  • begtostudy
  • 2010年05月07日 22:06
  • 6828

用PowerShell捕获当前IE游览器内的网址

几乎99%的人现在打开电脑都会打开游览器,也相信大家很多时候都会遇到过工作到一半或者有事要关电脑的时候,游览器打开了很多网址但是还没来得及看完,很多人会选择手动保存一个个网址,即便你把它保存进收藏夹里...
  • itanders
  • itanders
  • 2015年06月23日 22:45
  • 1192

powershell远程管理服务器磁盘空间

用powershell做自动化运维
  • Shiney927
  • Shiney927
  • 2015年07月22日 16:56
  • 1236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PowerShell的双引号
举报原因:
原因补充:

(最多只允许输入30个字)