Shell中括号的作用

作者:Danbo 时间:2015-8-7

单小括号()

①.命令组。括号中的命令将会断开一个子Shell顺序执行,所以括号中的变量不能被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
②.命令替换。等同于`cmd`,Shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
③.用于初始化数组。如:array=(a b c d)

双小括号(())

①.整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结果扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码1,或者是“假”,而一个非零值的表达式所返回的退出状态码将为0,或者是“true”。若是逻辑判断表达式exp为1则真,为0则假。
例如:

[root@localhost ~]# echo $((1+2));echo $?
3
0
[root@localhost ~]# echo $((1.1+2.2))
-bash: 1.1+2.2: syntax error: invalid arithmetic operator (error token is ".1+2.2")
[root@localhost ~]# echo $?
1

②.只要括号中的运算符、表达式符合C语言运算规则,都可用在$(())中,甚至是三目运算符。做不同进位运算,输出结果全部转化成了十进制。如下所示:

[root@localhost ~]# echo $((16#5f))
95           #即将16进制5f转换为十进制95
③.单纯用(())也可重定义变量值,比如,a=5;((a++))可将$a重定义为6
④.常用于算术运算比较双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用分号分开。只要括号中的表达式符合C语言运算规则,比如可以直接使用:for ((i=0;i<5;i++)),如果不使用双括号,则为:for i in `seq 4`或者for i in {0..4}。再如可以直接使用if (($i<5)),如果不使用双括号,则未if [ $i -lt 5 ]。

单中括号

①.bash内部命令,“[”和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构总共的左中括号是调用test的命令标识,有中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。
②.Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,可以使用转义字符,如下面这样:[ ab \< bc ],结果为真返回0,[ ]中的逻辑与和逻辑或使用-a和-o表示。
③.字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。
④.在一个array结构的上下文中,中括号用来引用数组中每个元素的编号。

双中括号

①.[[ ]]结构比[ ]结构更加通用。
②.支持字符串的模式匹配,字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,[[ hello == hell? ]],结果为真。
③.使用[[...]]条件判断结构,而不是[...],能够防止脚本中的许多逻辑错误。比如,&&、||操作符能够正常存在于[[]]条件为判断结构中,如果使用在[]就会出错。
例如:

if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]

大括号

①.对大括号中的文件名做扩展。比如:touch {a,d}.txt结果为:a.txt、d.txt。touch {a..d}.txt结果为:a.txt、b.txt、c.txt、d.txt。。
②.代码块,又被称为内部组,这个结构事实上创建了一个匿名函数。与小括号中的命令不同,大括号内的命令不会新开一个子Shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{ }的第一个命令和左括号之间必须有一个空格。

符号$后的括号

①.${a} 变量a的值,在不引起歧义的情况下可以省略大括号。
②.$(cmd) 命令替换,和`cmd`效果相同。
③.$((expression))和`expression`效果相同,计算数学表达式exp的数值,其中exp只要符合C语言的运算规则即可,甚至三目运算符和逻辑表达式都可以计算。

多条明命令执行

①.单小括号:(cmd1;cmc2;cmd3)
②.单大括号:{ cmd1;cmd2;cmd3; }

Shell中括号的作用的更多相关文章

  1. shell中括号的使用

    在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...

  2. shell中括号的特殊用法 linux if多条件判断

    一.   bash [  ] 单双括号 基本要素: Ø  [ ] 两个符号左右都要有空格分隔 Ø  内部操作符与操作变量之间要有空格:如  [  “a”  =  “b”  ] Ø  字符串比较中,&g ...

  3. shell中括号总结: {}, (), (()), [], [[]]

    括号总结 () 单小括号 命令组,括号中的命令将会开一个新的子shell执行 括号中变量不能被剩下脚本使用 命令之间分号隔开 命令和括号之间可以没有空格 命令替换,等同于``反引号 $(xxx)会被替 ...

  4. (转)shell中括号的特殊用法 linux if多条件判断

    一.   bash [  ] 单双括号 基本要素: Ø  [ ] 两个符号左右都要有空格分隔 Ø  内部操作符与操作变量之间要有空格:如  [  “a”  =  “b”  ] Ø  字符串比较中,&g ...

  5. SQL语句中加中括号[ ]的作用

    有些可能是SQL里面的保留字,但是你又用了它做字段名 比如Action,用[Action] 就可以避免这个问题,如果直接Action SQL就要报错了. 解决较长的中文名表名可能会被不识别的问题.

  6. python正则表达式中括号的作用,形如 "(\w+)\s+\w+"

    先看一个例子: import re string="abcdefg acbdgef abcdgfe cadbgfe" #带括号与不带括号的区别 regex=re.compile(& ...

  7. Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)

    Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...

  8. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  9. linux下的shell和脚本

    1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/s ...

随机推荐

  1. Javascript实现页面滚动时导航智能定位

    遇到的问题: 在做官网的时候,需要滚动定位的区块的图片不确定,无法确定用户浏览区域对应的模块导航 之前的解决方案是: 通过定位滚动条的位置来判断用户浏览区域对应的模块导航,这种方法的弊端是,区块的高度 ...

  2. Codeforces Gym101502 J-取数博弈

    还有J题,J题自己并不是,套的板子,大家写的都一样,因为大家都是套板子过的,贴一下代码,等学会了写一篇博客... J.Boxes Game 代码: 1 //J. Boxes Game-取数博弈-不会, ...

  3. 洛谷——P1126 机器人搬重物

    P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...

  4. PageHelper分页工具

    <a>共${page.total}件商品</a>    <a>共${page.pages}页</a>    <a>当前第${page.pag ...

  5. javascript --- 继承小结

    回顾之前学到的知识,大体上可以分为两类: 1. 基于构造器工作的模式. 2. 基于对象的工作模式. 3. 是否使用原型 4. 是否执行属性拷贝. 5. 两者都有(执行原型属性拷贝) 下面我们把之前的知 ...

  6. javascript 对象初探 (三)--- 传递/比较对象

    传递对象 当我们拷贝某个对象或者将对象传递给某个函数时,往往传递的都是该对象的引用.因此我们在该对象的引用上做任何改动,实际上都会影响到引用的原对象. var she = {num:1}; var h ...

  7. vue Syntax Error: Unexpected token {

    > music@1.0.0 dev F:\music\music> node build/dev-server.js > Starting dev server...ERROR Fa ...

  8. linux 中两个文档怎么对比内容是否一致

    可以用diff命令对比文档内容.[语法]: diff [参数] 文件1 文件2[说明]: 本命令比较两个文本文件,将不同的行列出来-b 将一串空格或TAB 转换成一个空格或TAB-e 生成一个编辑角本 ...

  9. 使用 sftp 向linux服务器传输文件

    sftp是加密的文件传输. 登陆 sftp name@123.21.331.1 1 2.把本地文件name1传到服务器name2下 put /name1.html /name2/ 1 把服务器name ...

  10. C++中sizeof(struct)怎么计算?(转)

    struct为空时,大小为1. 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type; }; 对结 ...