现在的位置: 首页 > 综合 > 正文

Shell特殊字符(中)

2013年10月02日 ⁄ 综合 ⁄ 共 1505字 ⁄ 字号 评论关闭

!  
  取反一个测试结果或退出状态【感叹号】:取反操作符(!)取反一个命令的退出状态。它也取反一个测试操作。例如,它能将相等符(=)为不等符(!=),取反操作符是一个bash的关键字
  在不同的环境里,感叹号也可以出现在间接变量引用.
  还有一种环境里,在命令行中,感叹号(!)调用属于历史命令机制的调用.值得一提的是,在一个脚本里,命令历史机制是被禁止的。

 


  通配符【星号】:星号(*)字符在用于匹配文件名扩展放入一个通配符。它自动匹配给定的目录下的每一个文件。
    星号也用于正则表达式中匹配任意数字字符
  算数操作符【星号】:在计算时,星号(*)表示乘法运算符。两个星号(**)表示求幂运算符。

 


  测试操作符【?】:表示一个条件测试。
    在双括号结构里,问号(?)表示C风格的三元操作符
    在参数替换表达式里,问号(?)测试一个变量是否被设置了值.
  通配符【?】 字符?被用于文件名扩展特性的文件名表达式的单字符匹配,同时也在扩展正则表达式中匹配任意一个字符.

 

$ 
   变量替换【$】:引用一个变量的内容
   行的结尾【$】:在正则表达式里,一个$字符表示匹配一行的结尾

 

${}
参数替换.

 

$*, $@
位置参数.

 

$?
保存退出码值的变量. 变量$?保存了一个命令,一个函数,或一个脚本的退出状态码的值。

 

$$
进程ID变量. 变量$$保存了脚本运行时的进程ID值。

 

()
  命令组.  
    1 (a=hello; echo $a)
 
  一组由圆括号括起来的命令是新开一个子shell来执行的.

  因为是在子shell里执行,在圆括号里的变量不能被脚本的其他部分访问。因为父进程(即脚本进程)不能存取子进程(即子shell)创建的变量
   1 a=123           
    2 ( a=321; )      
    3
    4 echo "a = $a"   # a = 123
    5 # 在圆括号里的变量"a"实际上是一个局部变量,作用局域只是在圆括号内用于数组始初化
 

  数组初始化.   
    1 Array=(element1 element2 element3)

 

{xxx,yyy,zzz,...}
   扩展支持.   
     1 cat {file1,file2,file3} > combined_file
       2 # 连接file1,file2,和file3的内容并写到文件combined_file里去.
       3
       4 cp file22.{txt,backup}
       5  # 拷贝"file22.txt"内容为"file22.backup"
    
     一个命令可以在文件名扩展中从逗号分隔的各模式来扩展参数列表。 [1] 文件名将会依照列表中逗号分隔开的模式匹配扩展。
      
     在扩展中的所有模式都不能包含空白字符,除非空白字符是被转义或引用的。
     echo {file1,file2}/ :{/ A," B",' C'}

     file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
 

{}

   代码块[花括号]. 这个结构也是一组命令代码块,事实上,它是匿名的函数。然而与一个函数所不同的,在代码块里的变量仍然能被脚本后面的代码访问。

    bash$ { local a;
         a=123; }
    bash: local: can only be used in a function

     1 a=123
     2 { a=321; }
     3 echo "a = $a"   # a = 321   (结果是在代码块里的值)
     4
     5 # 多谢, S.C.
 

 

     

抱歉!评论已关闭.