2011年10月13日星期四

shell之引用

在shell中有两类字符,一类是普通字符,另一类是所谓的"元字符",在shell中有特殊的含
义或用法。

当我们需要去掉元字符的特殊含义而恢复其字面意义时就必须使用"引用".通常有三种引用
方式,分别是转义(Escape,使用反斜杠字符\),强引用(使用单引号)和弱引用(使用双引号):
  1. 转义是用反斜杠放在需要转义的字符前,使得"元字符"变成普通字符。
  2. 强引用是用单引号把字符串包含起来,其中任何字符都看作普通字符(包括双引号),除
    了单引号自身。所以无法在两个单引号之间包含一个单引号,用\转义也不行(\已被当作普
    通字符,失去了转义的作用)。
  3. 弱引用是用双引号把字符串包含起来,除了“(双引号,double quote),\(反斜杠,
    backslash),$(美元符号),`(注意不是单引号,而是反引号,ESC下的那个键,作用是命令替
    换)之外,其他的大部分字符被当作普通字符。

好像上面已经把规则说得够清楚了,那么试着解读一下下面这个语句:
awk 'BEGIN {print "Here is a single quote <'"'"'>"}'
输出:
Here is a single quote <'>
乍一看,对于这个结果还是蛮惊讶而且比较迷糊。其实这里利用了shell的引用的一个原则:
引用与后面接着的非引用字符,或者其他引用,会整合一个命令参数
所以对于上面那个例子的解释是,其实包括了三个引用:
  1. 'BEGIN { print "Here is a single quote<'
  2. "'"
  3. '>" }'
然后三个引用连接成为一个参数。下面的两个语句会有同样的效果:
awk ’BEGIN { print "Here is a single quote <’\’’>" }’
awk "BEGIN { print \"Here is a single quote <’>\" }"


参考资料:这里

没有评论:

发表评论