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. 关于TS返回 Can't use function return value in write context 问题

    在项目开发过程中,出现某一接口文件间歇性出现500错误,间歇性出现说明是有条件才会产生,查看错误日志显示:Fatal error: Can't use function return value in ...

  2. E. Sergey and Subway

    比赛时候写复杂了…… 我写的是 计算每个节点树内所有点到某个点的距离和. #include <bits/stdc++.h> using namespace std; typedef lon ...

  3. 计蒜客 UCloud 的安全秘钥(随机化+Hash)

    题目链接 UCloud 的安全秘钥 对于简单的版本,我们直接枚举每个子序列,然后sort一下判断是否完全一样即可. #include <bits/stdc++.h> using names ...

  4. ASP.NET Core 中间件基本用法

    ASP.NET Core 中间件 ASP.NET Core的处理流程是一个管道,而中间件是装配到管道中的用于处理请求和响应的组件.中间件按照装配的先后顺序执行,并决定是否进入下一个组件.中间件管道的处 ...

  5. OS | Socket

    TCP 创建socket: int socket(int domain, int type, int protocol); AF = Address FamilyPF = Protocol Famil ...

  6. 智能手机+DIY红外=万能遥控器

    目前好像只有:三星S4.,努比亚大牛,华为荣耀3等几款新机才有红外遥控功能,那我们使用的手机没有这个功能怎么办?不要急我有办法呵呵,本次DIY材料好找又简单,大家都可以亲自试一试! DIY材料:红外二 ...

  7. 【转载】Java NIO学习

    这篇文章介绍了NIO的基本概念: http://www.iteye.com/magazines/132-Java-NIO Java NIO提供了与标准IO不同的IO工作方式: Channels and ...

  8. 手动安装pip

    apt-get instal pip  成功之后,有根据pip的提示,进行了升级,升级之后,pip就出问题了 为了解决上面问题,手动安装pip,依次执行下面命令 1 2 3 4 5 [root@min ...

  9. 需要配置执行path?no

    下面的代码以管理员权限运行即可,保存为bat 2018/2/6(basic) - 初始化版本 @echo off :continue echo 输入exit退出 set /p My_PATH=请输入要 ...

  10. HDU4126Genghis Khan the Conqueror(最小生成树+并查集)

    Genghis Khan the Conqueror Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 327680/327680 K ...