参考链接:shell 中各种括号的作用()、(())、[]、[[]]、{}
一、小括号,圆括号 ()
1.1 单小括号 ()
- 命令组:括号中可以放多条命令,命令之间通过分号
;
分隔,用空格是没用滴,举例子:
COMAND=$(pwd ; ls; pwd)
echo $COMAND
#下面是结果
/home/test_and_learn/shell test.sh vriable.sh /home/test_and_learn/shell
- 命令替换:没看懂
- 数组初始化:
array=(a b c d)
1.2 双小括号 ()
- 整数扩展:没看懂
- 将符合c语言运算规则的运算符表达式转为10进制,举例;
echo $((16#20)) # 16进制转10进制
echo $((0x20)) # 16进制转10进制
echo $((8#20)) # 8进制转10进制
echo $((020)) # 8进制转10进制
echo $((1 == 2 ? 3 : 4))
# 下面是脚本输出
32
32
16
16
4
- 单纯用 (( )) 也可重定义变量值,比如
a=5; ((a++))
可将 $a 重定义为6 - 常用于算术运算比较,
比如下面三种for等价
for((i=0;i<5;i++))
for i in `seq 0 4`
for i in {0..4}
比如下面两种if等价
if (($i<5))
if [ $i -lt 5 ]
二、中括号,方括号[]
2.1 单中括号 []
- bash内部命令,左中括号表示调用
test
的命令标识,右中括号是关闭条件判断。 - Test和[]中比较运算符只有
==
与!=
, 这两者仅用于 字符串 比较,墙裂不建议用于整数比较(可能因被比较对象包含字符产生不察觉的错误结果),整数比较必须用-eq
(等于),-ne
(不等于),-gt
(大于),-ge
(大于等于),-It
(小于),-Ie
(小于等于),这种形式 - 还有部分没完全看懂
- 在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号
2.2 双中括号 [[]]
- 使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用
if [[ $a != 1 && $a != 2 ]]
, 如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]
或者if [ $a -ne 1 -a $a != 2 ]
。
三、大括号、花括号 {}
3.1 常规用法
3.2 几种特殊的替换结构
3.3 四种模式匹配替换结构
3.4 字符串提取和替换
四、符号$
后的括号
${a}
变量a的值, 在不引起歧义的情况下可以省略大括号。$(cmd)
命令替换,结果为shell命令cmd的输出,举例:下面这两行效果一样。(某些Shell版本不支持$()形式的命令替换, 如tcsh)
echo $(pwd)
echo `pwd`
- $((expression)) 和
exprexpression
效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算(上面1.2 双小括号这一小节讲过了哥哥)
五、使用
多条命令执行 :