shell之小括号、中括号、大括号

时间:2021-08-23 08:38:21

1、Shell中变量的原形:${var}  一串命令的执行(代替变量)

#等价于
$ var=test
$ echo $var
test #例如,用在这个位置
$ echo ${var}AA
testAA

2、命令替换$(cmd) 一串命令的执行(替换命令)

命令替换$(cmd)和符号`cmd`(注意这不是单引号,在美式键盘上,`是ESC下面的那个键)有相同之处

$ ls
a b c
$ echo $(ls)
a b c
$ echo `ls`
a b c

我们来分析一下命令echo $(ls),以便理解所谓命令替换是什么意思:
shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo $(ls)中的$(ls)位置,即替换了$(ls),再执行echo命令。

()和{}都是对一串的命令进行执行,但有所区别:
A,()只是对一串命令重新开一个子shell进行执行
B,{}对一串命令在当前shell执行

3、POSIX标准的扩展计算:$((exp))  用于数学计算(整数的比较和运算)

这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),甚至是三目运算符。
注意:这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0。

$ echo $((+)) 

$ echo $((>)) 

$ echo $((< ? :)) 

$ echo $var 

$ echo $((var=+)) 

$ echo $var 

$ echo $((var++)) 

$ echo $var
 

4、单中括号 [] 对于转义字符要加\ eg:[ \($INT\)]

bash 的内部命令, [ 和 test 是等同的。

Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。

因为[ 是Linux内部命令,所以 [ a+b ]之间要有空格。

5、双中括号[[ ]]   不用加斜杠转义eg: [[ ($INT) ]] 较常用

[[是 bash 程序语言的关键字。使用[[ ... ]]条件判断结构。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

4、5例如:

if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]] for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done

https://my.oschina.net/tridays/blog/807162

最后,推荐使用 [[ 来进行各种判断,这能避免很多错误,比如 $a 为空的情况下,[ $a == 1 ] 就是语法错误,因为 [ 命令拿到的实际上只有 ==1] 三个参数。即:[[]]常用些。

$ [  <  ]
zsh: no such file or directory:
#-------------------------------------
$ [[ < ]] && echo True || echo False
True

首先,来看下shell中$与各种括号的结合:

$( )运行shell命令返回输出

如$(ls -a)

$(( )) 算术运算

如$(($a+$b))

$[] 算术运算

如$[$a+$b]

${ } 变量调用

如${$var}

再来看看单独使用的情况:

( ) 正则表达式中可以表示分组,并在后面通过\1,\2等调用

[ ] 测试表达式

[[ ]] 测试表达式

{ }可用于括起整个命令块

实在是不好记,于是,小林君又反过来总结变量调用、命令调用、测试表达式和算术运算的方法:

变量调用:

方法一:${var}

方法二:$var

命令调用:

方法一:`COMMAND`

方法二:$(COMMAND)

测试表达式:

方法一:[ expression ]

方法二:[[ expression ]]

方法三:test expression

算术运算

方法一:let 算术运算表达式

let C=$A+$B 这里变量A和B前面的$可以省略

方法二:$[算术运算表达式]

C=$[$A+$B]

方法三:$((算术运算表达式))

C=$(($A+$B))

方法四:expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用,遇到乘法的*号还要转义

C=`expr $A + $B`

方法五:expr $[算术运算表达式],遇到乘法*号不用转义。

dd

shell之小括号、中括号、大括号的更多相关文章

  1. shell编程中的单&sol;双 小括号&comma; 中括号&comma; 大括号

    linux shell中的变量类型?分字符串或者数字或者bool类型吗? 参考: http://www.cnblogs.com/nufangrensheng/p/3477281.html 不分! sh ...

  2. Linux Shell基础 单引号、双引号、反引号、小括号和大括号

    单引号和双引号 单引号和双引号用于变量值出现空格时将字符用引号括起来. 二者的主要区别在于, 被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义: 被双引号括起来的字符中,"$& ...

  3. php正则:匹配&lpar;&rpar;,&lbrace;&rcub;,&lbrack;&rsqb;小括号,大括号,中括号里面的内容

    php正则:匹配(),{},[]小括号,大括号,中括号里面的内容 比如有一段字符: $s='60c8 {"code":"200","message&q ...

  4. scala lambda 小括号与大括号

    看akka源码的时候看到这样的一个用法: 作为接触scala两天半的我有些看不明白了.好一番搜索看到这样的答案: <scala雾中风景(2): 小括号与花括号> 下面的问题,表面上看是小括 ...

  5. Linux中的小括号和大括号,&dollar;&lbrace;&rcub;&sol;&dollar;&lpar;&rpar;&sol;&lpar;&rpar;&sol;&lbrace;&rcub;&sol;&dollar;&lbrace;var&colon;-string&rcub;&sol;&dollar;&lbrace;var&colon;&equals;string&rcub;&sol;&dollar;&lbrace;var&colon;&plus;string&rcub;&sol;&dollar;&lbrace;var&colon;&quest;string&rcub;&sol;&dollar;&lbrace;var&percnt;pattern&rcub;&sol;&dollar;&lbrace;var&num;pattern&rcub;&sol;&dollar;&lbrace;var&percnt;&percnt;pattern&rcub;&sol;&dollar;&lbrace;var&num;&num;pattern&rcub;

    简单记录一下大小括号在Linux中的用处. 1.${var},这是Linux中变量的原形.所以$var,别忘记了你的本来面目. # a= # echo $a # echo ${a} # echo ${ ...

  6. JS使用正则表达式获取小括号、中括号及花括号内容的方法示例

    本文实例讲述了JS使用正则表达式获取小括号.中括号及花括号内容的方法.分享给大家供大家参考,具体如下: JS 正则表达式 获取小括号 中括号 花括号内的内容 <!DOCTYPE html> ...

  7. shell中的括号(小括号,中括号,大括号)及单引号、 双引号,反引号(&grave;&grave;)

    一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  8. shell脚本中的几个括号总结&lpar;小括号&sol;大括号&sol;花括号&rpar;--from&colon;http&colon;&sol;&sol;www&period;cnblogs&period;com&sol;hanyan225&sol;archive&sol;2011&sol;10&sol;06&sol;2199652&period;html

    在Shell中的小括号,大括号结构和有括号的变量,命令的用法如下: 1.${var}2.$(cmd)3.()和{}4.${var:-string},${var:+string},${var:=stri ...

  9. shell中的大括号和小括号

      1.shell中的大括号和小括号   1.${var} 2.$(cmd) 3.() 和 {} 4.${var:-string}, ${var:+string},  ${var:=string}, ...

随机推荐

  1. tomcat配置环境变量

    先把jdk配置好,这里不在赘述. 一.配置Tomcat环境变量 1,新建变量名:CATALINA_BASE,变量值:C:\tomcat2,新建变量名:CATALINA_HOME,变 量值:C:\tom ...

  2. Java 关键字 native

    native 关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件中,而是在用其他语言实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言 ...

  3. Env&colon;autojump安装使用

    注:这里只介绍我使用的方式,当然不是唯一方式 作用:autojump可以快速进行路径导航,具备记忆历史路径:不仅仅是可以进入当前路径下的某个路径,也可以是其他历史路径 1. 下载 首先,$ git c ...

  4. mysql-5&period;6&period;15&lowbar;winX64在win764位系统下的安装操作步骤总结

      mysql 版权声明:本文为博主原创文章,未经博主允许不得转载. 自从换了新电脑win764位,支持的内存从原来的3G(2G机身+1G内存条)变到了现在的8G(机身4G+4G内存条),机子的速度是 ...

  5. codeforces 675C Money Transfers map

    上面是官方题解,写的很好,然后就A了,就是找到前缀和相等的最多区间,这样就可以减去更多的1 然后肯定很多人肯定很奇怪为什么从1开始数,其实从2开始也一样,因为是个环,从哪里开始记录前缀和都一样 我们的 ...

  6. POJ 1511&Tab; Invitation Cards (最短路spfa)

    Invitation Cards 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description In the age ...

  7. linux mysql数据库安装(tar&period;gz)

    概述 mysql数据库在linux下可以充分发挥威力,mysql数据库越来越受到软件公司的青睐,为什么呢? 免费.跨平台.轻.支持多并发 在北京很多软件公司属于创业型的中.小公司,从节约成本的角度考虑 ...

  8. IDEA下搭建Shiro-web环境,总是报BasicDataSource,classnotfound;问题解决

    进入报错跟踪,查看加载的classloader中没有dbcp相关jar包 猜测结果是,jar没有被加载,但是maven引用没错,而且也能找到对应的class 后来又查看IDEA配置中,相关jar也引入 ...

  9. QANet

    Reading Comprehension(RC) 阅读理解对于机器来说, 是一项非常艰巨的任务.google提出QANet, 目前(2018 0505)一直是SQuAD的No. 1. 今天简单地与大 ...

  10. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...