Chinaunix首页 | 论坛 | 博客

14#

  • 博客访问: 170755
  • 博文数量: 48
  • 博客积分: 1910
  • 博客等级: 上尉
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-27 10:38
文章存档

2012年(8)

2011年(2)

2010年(13)

2009年(25)

我的朋友

分类: Python/Ruby

2009-09-01 22:49:10

特殊字符分类:

 remeta会和shellmeta还有wildcard 相同,所以要转义,即使用引用;

 

引用 (单引号、双引号、反斜线)

 

  * hard quote' ' (单引号),凡在hard quote中的所有meta均被关闭。
       * soft quote
" " (双引号),在soft quoe中大部份meta都会被关闭,但某些则保留($,反引号,反斜杠)

  * escape\(反斜线),只有紧接在escape (跳脱字符)之后的单一meta才被关闭。

 

1.引用的作用就是保护字符串中的特殊字符不被shell或者shell脚本重新解释, 或者扩展.


2.
 引用的一个重要作用就是保护命令行参数不被shell解释, 但是还是能够让正在调用的程序来扩展它(某些程序和工具能够重新解释或者扩展被引用的特殊字符.

grep '[Ff]irst' *.txt   OR  grep [Ff]irst *.txt

 

注:awk ,sed,grep 的单引号问题,可以用双引号吗,可以都不用吗 ?

总的来说,正是因为shell中的metawildcard有时会和command中的自定义的metaRE中的meta相同,为了让command中的meta不被shell解析以至于改变,就必须用shell quoting(单引号,双引号,反斜线)来保证其文字不变性。

So最好用单引号括起,因为凡在hard quote中的所有meta均被关闭。

 

 

3.引用还可以改掉echo's不换行的"毛病".

bash$ echo $(ls -l)
total 8 -rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh -rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.sh


bash$ echo "$(ls -l)"
total 8
 -rw-rw-r--  1 bozo bozo 130 Aug 21 12:57 t222.sh
 -rw-rw-r--  1 bozo bozo  78 Aug 21 12:57 t71.sh


注:

l          echo语句中, 只有在单词分割(word splitting)或者需要保留空白的时候, 才需要把参数用双引号括起来.

eg

  $ echo xx      xxx

  xx xxx

  $ echo "xx      xxx"

xx      xxx

l           

 COMMAND $variable2 $variable2 $variable2        # COMMAND将不带参数执行
   COMMAND "$variable2" "$variable2" "$variable2"  # COMMAND
将以3个空参数来执行
   COMMAND "$variable2 $variable2 $variable2"      # COMMAND
将以1个参数来执行(2空格).


4.
转义:转义是一种引用单个字符的方法. 一个前面放上转义符 (\)的字符就是告诉shell这个字符按照字面的意思进行解释, 换句话说, 就是这个字符失去了它的特殊含义.


    4.1
在某些特定的命令和工具中比如echosed, 转义符往往会起到相反效果 - 它反倒可能会引发出这个字符的特殊含义.

  特定的转义符的特殊的含义,echosed命令中使用: 
    
    \n  
 表示新的一行
    \r  
 表示回车
    \t  
 表示水平制表符
    \v  
 表示垂直制表符
    \b  
 表示后退符
    \a  
 表示"alert"(蜂鸣或者闪烁)
    \0xx
 转换为八进制的ASCII

    4.2 \的行为依赖于它自身是否被转义, 被引用(""), 或者是否出现在命令替换或here document.


    4.3 $' '
字符串  ????

    # 如果使用$'\X'结构,-e选项就不必要了.
    echo; echo "NEWLINE AND BEEP"
    echo $'\n'           #
 新行.
    echo $'\a'           #
 警告(蜂鸣).

    4.4  赋值给变量的字符串的元素也会被转义, 但是不能把一个单独的转义符(一个"裸体的"转义符)赋值给变量.

     variable=\\
     echo "$variable"        # \

     variable=\\\
     echo "$variable"
     #
 不能正常运行 - 报错:

   4.5 转义符也提供续行功能, 也就是编写多行命令的功能. 一般的, 每一个单独行都包含一个不同的命令, 但是每行结尾的转义符都会转义换行符, 这样下一行会与上一行一起形成一个命令序列.

 

   这时候 \起的是什么作用呢,是转义还是转义符的特殊的含义 。

http://blog.csdn.net/chen_dx/archive/2008/05/20/2463495.aspx

阅读(3472) | 评论(0) | 转发(0) |
0

上一篇:Bash数值计算

下一篇:6. 退出和退出状态码

给主人留下些什么吧!~~