shell脚本学习之Bash shell 里各种括号的用法
今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题。对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash
Shell几种括号的用法和区别,别的Shell我不会。。。
(( )) :一对圆括号有两个地方用到。
1,for循环,
for (( expr1 ; expr2 ; expr3 ))
这里一对双括号里边的表达式,GNU的文档指出,expr1支持 Shell Arithmetic;expr2不为0时,expr3被赋值且语句执行。说的很麻烦,还要花时间搞清楚什么是Shell Arithmetic。其实一言以蔽之,支持数字条件。比如:
for (( a=0 ; a<10 ; a++ )); do echo $a; done
会输出 0 1 2 3 (带换行哦~~~)
2,数学表达
(( )) 和 $(( ))
(( )) 的用法与let一样,就不用多解释了吧~~~
$(( ))就是把计算结果拿出来,可以用在双引号里边,比如:
echo "1+2=$(( 1 + 2 ))"
会输出 1+2=3
( ):一个圆括号
在for循环里,跟C语法一样一样的。
或者是子程序,返回整个里边表达的返回值。里边的变量都是局部的,修改不会带到外边。举例子
a=1
(a=3; echo $a)
echo a
结果是 3 1
还有个就是圈数组。。。这个就没神马意思了
[ ]:一个方括号,是bash的命令,查man手册是可以查到的,跟test一样,在手册里可以看到很多用法。比如-b -c -gt -eq 什么的很多,还有用-a表示与,-o表示或等等
[[ ]]:一对方括号是一个方括号的加强版,则是Shell的保留字,里边支持了 || && 等等这些符号。一般我喜欢用这个
还有相对复杂的 { }
几个用处,区分变量,如:
var=abcd; echo ${var}EFG;
这样,Bash就不会认为变量是varEFG了
还有用来截取字符串的 ${ }语法比较灵活多变,这里不做多解释,大家有兴趣可以自己去搜搜资料,一般我脚本用到的字符串处理,这个都能搞定了。
代码块。用来区分代码的,但是跟( )有个区别,就是在末尾要加上 ;
目前看到常用的用法也就是这样,肯定不全,欢迎补充,欢迎交流。
最新文章
- 冰冻三尺非一日之寒--web框架Django(三)
- DNS相关知识
- [转]CAP原理与最终一致性 强一致性 透析
- 切换到ZSH以后遇到的坑
- 12个有趣的C语言问答(详解)
- BZOJ_1618_ [Usaco2008_Nov]_Buying_Hay_购买干草(动态规划,完全背包)
- Nginx对于图片,js等静态文件的缓存设置
- 利用css3特性写出三角形(兼容IE浏览器)
- 最近ssh遇到异常及解决
- Java中的throw和throws的区别
- MySQL之数据的insert-delete-update操作
- SpringMVC系列之(二) springMVC和Struts异同
- Runtime详解(下)
- BZOJ 2457 - 双端队列 - [思维题]
- Java之旅_高级教程_URL处理
- mongodb学习-练习实例
- 在Microsoft Dynamic 365/2016环境使用LinqPad查询数据(不使用linqpad Microsoft Dynamic 365 Driver)
- finger-guessing game:3增加猜拳次数及猜拳按钮显示
- 【ContestHunter】【弱省胡策】【Round0】(A)&;【Round1】(B)
- 数据注解特性--NotMapped
热门文章
- 【Android 开源】:最火的Android开源项目 第02期
- HDU-1716 排列2 (DFS)
- LoadRunner中的参数与变量
- selenium webdriver 环境搭建--java
- java基础(十七)集合(四)
- [LeetCode] 3. Longest Substring Without Repeating Characters 解题思路
- 普通用户从非80端口启动tomcat,通过端口转发监听80端口
- linux内核--软中断与tasklet
- Test Bench基础知识笔记
- [Webpack 2] Polyfill Promises for Webpack 2