Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2373729
  • 博文数量: 298
  • 博客积分: 7876
  • 博客等级: 准将
  • 技术积分: 5500
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-23 13:39
文章存档

2013年(2)

2012年(142)

2011年(154)

分类: Python/Ruby

2012-04-24 10:26:01

Bash编程中各类括号的应用

 

整理自:http://hi.baidu.com/leejun_2005/blog/item/a09ae9b5ec26847e8ad4b2df.html

 

()在子shell中运行

(a=1);echo $a,结果是空,因为a=1不是在当前shell中运行的(a=1);(echo $a)也是空的。

()同时也是数组的赋值,比如a=(1 3 5),那么${a[0]}=1;${a[1]}=3;${a[2]}=5
(())表达式计算,包括数值运算和逻辑运算

具体见:http://blog.chinaunix.net/uid-25324849-id-3079830.html

a=1;((a++));echo $a,这时a就是2了。
<()>()进程代入,可以把命令的执行结果当成文件一样读入
   
比如comm前一般需要sort,那就可以这样comm <(sort 1.lst) <(sort 2.lst)
   
或者是paste <(cut -t2 file1) <(cut -t1 file1)
   
,和管道差不多,但是支持多个输入。
$()$(cmd)执行cmd的结果,

    比如cmdecho ls,那么就是执行ls,比如file $(which bash)which bash的结果是/bin/bash

    所以file $(which bash)等于file /bin/bash。如果你$(ls),而且你的当前目录下只有a b两个文件,

那么就是执行a b,然后系统会提示,命令没找到。
$(())表达式扩展,对返回结果进行处理

具体见:http://blog.chinaunix.net/uid-25324849-id-3079830.html
[][[]]

1[]就是 test[][[]]都是条件表达式,不过[[]]有比[]高的容错性

具体见《Shell[[[的异同》:http://blog.chinaunix.net/uid-25324849-id-3187464.html

如果a为空,那么[ $a -eq 0 ]会报错,但是[[ $a -eq 0 ]]不会,所以一般都会使用[[]]或者是

    [ "$a" -eq 0 ][[]]支持的功能也比 [] 多,比如[[ aaa =~ a{3} ]]

    2)正则表达式:如果你的当前目录下有a1-a9九个文件,你可以用a[1-9]来替代这九个文件。

    有点需要注意,你不能用a[1-20]来代替a1- a20,必须要a[1-9] a1[0-9] a20
$[]$(())的过去形式,

    现在已经不建议使用
{}{1..30} 就是1-30

    或者是/{,s}bin/表示/bin//sbin/ab{c,d,e}表示abcabdabe
${}变量的Parameter Expansion

     具体见:http://blog.chinaunix.net/uid-25324849-id-3079883.html

 

 

阅读(1824) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~