PowerShell的单引号和反引号

原创 2007年09月26日 22:15:00

作者: Edengundam(马涛)

今天思考了很久, WMI对于Windows来说是非常重要的一个工具. 包含了很多特性, 目前我正在看WMI关于事件和WQL的资料. PowerShell在今后也会提供WMI的供应程序(provider). 

不过今天我想介绍PowerShell的单引号和反引号, 以及与Bash, Perl之间的一些对比. 学习任何事务时候, 开始用的是相似性进行记忆, 但是随着知识的积累, 你最终还会一定会引入对比记忆. 不过根据笔者在学习C, C#, bash, Perl, PowerShell的过程中, 始终认为, 首先应该以相似性为主. 这点在我学习BRE, ERE, ARE, 即基本正则表达式(废弃), 扩展正则表达式(现代正则表达式), 高级正则表达式时, 给我印象最为深刻.

如果您对bash, Perl不了解, 也没有关系, 之所以要对比, 只是为了告诉您: 伟大的思想, 表现往往是一致的. 再稍后, 我会单独来讲双引号. 其实只要记住规则, PowerShell中的引号可要比bash的简单很多了(准确说是传统的sh, 因为bash中最好使用'$()', 而避免反引号的使用).

在bash, Perl, PowerShell中, 对引号的比较往往涉及如下三个方面: 变量展开(也被称为: 变量代换, 变量篡改. ), 转义字符, 引号自身.

 

 
变量代换
转义字符支持程度
单引号自身引用
Bash
不允许
不允许
不允许
Perl
不允许
允许两种,见注1
见注1
PowerShell
不允许
不允许
见注2
 注1: Perl语言中, 单引号中允许出现两种转义序列: “//”和”/’”, 通过此方法, 可以在单引号中, 引用单引号.
注2: PowerShell中, 采取了一种更加通用的方法来引用单引号, 这种规则与csv文件, 一些数据库SQL语句语法一致, 既将连续出现的两个单引号当作一个单引号来处理, 请参见例子.

在我们看例子前, 我们先来看看转义字符. 在C, C++, C#, Java, ksh, bash, Perl等等语言中, 转义字符都是反斜线(/). 通过特定语法规则, 使用转义字符可以构建被称为转义字符序列的特殊表达式. 这种表达式, 往往通知语言的词法分析模块, 对该转义序列进行特殊处理.

由于历史原因, Dos, Windows操作系统使用反斜线作为路径的分隔符, 这使得PowerShell团队做出了惊人的抉择, 使用反引号(重音符号)作为转义字符. 这种惊人的不一致, 让有类似我举例语言背景的人们可能很恶心(我的第一反应就是这样). PowerShell团队做出这种无奈的举动也是事出有因的. 如果遵照传统, 那么我们在PowerShell中使用目录时候, 恐怕都要连续使用两个反斜线才能干活, 这恐怕会让我们疯掉>_<. 正如PowerShell团队的架构师所说, 其实用反引号虽然开始不习惯, 但是你只需要几分钟去适应. 反正它都是转义字符而已, 再说转移序列又没有变化^_^.

PowerShell中支持的转移序列有点少, 特别是相比Perl的来说:

`'    单引号
`"    双引号
`0    空值
`a    警报
`b    退格
`f    换页
`n    新行
`r    回车
`t    水平制表
`v    垂直制表

正如你所见到的, 除了转义字符变了, 其他的都没有变. 在Perl中还有一些功能强大的转移序列, 这里我就不再多说, 有兴趣的人可以参考关于Perl的书籍. 这样的转移序列例如: /U, /E, /L, /l, /u.

在我们来看几个例子(转义序列的例子放到下次举例):

PS C:> 'My money is on the way to my Home'
My money is on the way to my Home
PS C
:> $money = 100
PS C
:> 'My $money is on the way to my Home'
My $money is on the way to my Home
PS C
:> 'Test escape sequences: `0'
Test escape sequences
: `0
PS C
:> 'Test escape sequences: `n'
Test escape sequences
: `n
PS C
:> 'Test escape sequences: `r'
Test escape sequences
: `r
PS C
:> 'Test escape sequences: `r`n'
Test escape sequences
: `r`n
PS C
:> 'Test doubling up single quotes: '''
Test doubling up single quotes
: '
PS C:> 
'Test doubling up single quotes: ''End'
Test doubling up single quotes: 
'End
PS C
:> 'Test doubling up single quotes: 'Wrong''
表达式或语句中出现意外标记“Wrong”。
所在位置 行
:1 字符: 41
+ 'Test doubling up single quotes: 'Wrong'' <<<<

我相信, 这些例子对于聪明的您来说, 应该不需要过多解释. 您一定要看清楚"单引号"和"反引号". 经过无数次事实证明(这些证明一般都是别人在论坛求助时发生的, 我曾经遇到过几次), 大部分人, 第一眼看到单引号, 反引号, 双引号时, 会错误的使用另一种引号. 这往往缘于他们对引号的不了解, 如果对引号的特性很清楚, 在看到引号时, 代码编写者的意图, 您也一定猜测到了.

OK, 由于明天要去看病, 今天只啰唆这么多, 希望大家喜欢. 引号, 往往在bash中就是判断一个人水平的好考点. 因此希望大家能予以重视.

PowerShell:引号的美妙

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

Powershell 变量

注:原文地址:http://www.cnblogs.com/bhtfg538/archive/2010/11/18/1880999.html
  • tongye20060601
  • tongye20060601
  • 2011年06月02日 20:03
  • 466

斜线与反斜线

1.斜线反斜线辨识。按照手写英文字母倾斜方向,右上到左下为斜线/ forwardslash,一般用在文本相关场合,比如路径;倾斜方向与手写倾斜方向相反的为反斜线\ backslash,一般用在编程表示...
  • zeapoem
  • zeapoem
  • 2017年12月25日 12:06
  • 53

正斜杠“\"与反斜杠”/“【转载总结+自己编写】

正斜杠(/)与反斜杠(\)总结 正斜杠,又称左斜杠,符号是"/"; 反斜杠,也称右斜杠,符号是"\"。 经常很迷惑正斜杠与反斜杠到底有何区别?以下是一些总结: DOS路径: C:\WINDOWS\...
  • wasb001
  • wasb001
  • 2014年02月28日 15:58
  • 1566

DOS命令行中的双引号

在DOS命令窗口下,运行C:\Program Files\WinRAR\WinRAR.exe,提示如下错误: 因为C:\Program Files\WinRAR\WinRAR.exe中...
  • Hanford
  • Hanford
  • 2016年12月13日 09:48
  • 905

PowerShell的单引号和反引号

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

Go语言中的单引号、双引号、反引号

在Go语言中不倾向于使用单引号来表示字符串,请根据需要使用双引号或反引号。 Go语言中的字符串字面量使用 双引号 或 反引号 来创建: 双引号用来创建可解析的字符串字面量(支持转义,但...
  • wanchope
  • wanchope
  • 2016年11月30日 20:58
  • 2203

shell中反引号、单引号、双引号的使用

总结一些简单的shell小知识,在一位网友的博客基础上做了一些修改,感谢一些网友的分享。 一、shell中的反引号(` `)的作用 将反引号(` `)内的字符串当作shell命令来执行,返回值是命令的...
  • CodeFamilyHello
  • CodeFamilyHello
  • 2014年12月01日 15:22
  • 1506

在shell下命令格式之基本式、反斜线、单引号、双引号、反引号

1.Linux下执行命令的格式为: command [-options] parameter1 parameter2 ... Remarks:               a)options和para...
  • wangjianno2
  • wangjianno2
  • 2013年12月06日 10:46
  • 643

DOS批处理下格式化日期字符串

iamlaosong文 在Linux下,简单的一句话:date '+%Y%m%d-%H%M%S'就可以得到你要的输出:20120331-064219  可是在windows下,要想得到这个,简单的办法...
  • iamlaosong
  • iamlaosong
  • 2017年05月15日 16:28
  • 903
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PowerShell的单引号和反引号
举报原因:
原因补充:

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