Linux shell中各种括号的用法
程序员文章站
2022-09-03 23:43:32
最近被shell里的各种括号弄的有点晕了,又是小括号又是中括号,有时又有花括号,小括号和中括号还有双层写法,用途各不一样,我搞混了多次,对它们的用法有些迷糊了,于是我在这里整理一下。如有错误,望诸君指正。 小括号系列 [toc] () 用途:数组初始化 $() 用途:引用命令的运行结果 (()) 用 ......
最近被shell里的各种括号弄的有点晕了,又是小括号又是中括号,有时又有花括号,小括号和中括号还有双层写法,用途各不一样,我搞混了多次,对它们的用法有些迷糊了,于是我在这里整理一下。如有错误,望诸君指正。
小括号系列
()
- 用途:数组初始化
array=(1 2 3 4 5)
$()
- 用途:引用命令的运行结果
# 先执行小括号中的命令,然后使用将命令的运行结果赋值给a a=$(command)
(())
- 用途1:数值比较
#!/bin/bash a=1 b=2 if ((a>b)) then echo "a>b" elif ((a<b)) then echo "a<b" fi # a<b
-
用途2:高级数学运算
双小括号命令提供了更多的数学符号,可以在双小括号中进行各种逻辑运算、数学运算,也支持更多的运算符(如 ++、-- 等)。
#!/bin/bash # 实现c语言式迭代 for ((i=0;i<5;i++)) do command done
$(())
- 用途1:进行数学计算
a=1 b=2 echo $((a+b)) # 3
中括号系列
[]
-
用途1:条件测试
-
字符串比较
== 等于
!= 不等于 -
整数比较:
-gt 不等于
-lt 大于
-ne 等于
-gt 不等于
-
字符串比较
- 表达式与[]之间要有空格
#!/bin/bash if [ hello == hello ] then echo "yes" else echo "no" fi # yes
- 用途2:数组索引
array=(1 2 3 4 5) echo ${array[2]} # 3
$[]
- 效果等同于$(())
[[]]
-
用途:字符串比较的高级模式
&& || < > 可以正常存在于[[]]中
可在[[]]中使用正则表达式
#!/bin/bash if [[ hello == hell* ]] then echo "yes" else echo "no" fi # yes
花括号系列
{}
- 用途:构造序列
echo {1..5} # 1 2 3 4 5 echo {5..1} # 5 4 3 2 1 echo {1..10..2} # 1 3 5 7 9 echo {a..c} # a b c echo {1..3}{a..c} # 1a 1b 1c 2a 2b 2c 3a 3b 3c
${}
- 引用变量值
# 数组取值 array=(1 2 3 4 5) echo ${array[2]} # 3
a=1 echo ${a}b # 1b echo $ab # bash会认为ab是一个整体,由于ab没有定义,所以会报错
总结
- 引用:
- 引用变量值 ${}
- 引用命令运行结果 $()
- 数学运算:$[] (()) $(())
- 条件测试:[] [[]] (())