shell中的括号
单小括号()
命令组
(command1;command2;command3)连接多个命令组,用;隔开,最后一个命令后;可加可不加。括号中的命令会新开一个子shell顺序执行,所以里面的操作对括号外主进程无关。
命令替换
$(command)先执行 command 命令,得到标准输出,再将此输出放回到原来命令。
初始化数组
array=(a b c)
双小括号(())
C语言规则运算
表达式 $((exp)),其中exp只要符合C语言规则的运算符即可,包括加减乘除、+=、<=、>=等。
算术比较
在((exp))中可以进行算术比较(不能进行字符串比较),双括号中的变量可以省略$符号前缀,当然也可以带着。
单中括号[]
条件判断
[] 本质上是 test 语句,[是调用test的命令标识,]是关闭条件判断
字符范围
用作正则表达式的一部分,描述一个匹配的字符范围
数组下标
echo ${a[0]}
双中括号[[]]
条件判断
[]和test是命令,而[[]]是关键字,所以重定向等字符在[]中会被认为成重定向,而在[[]]中是比较符号的意思。
&&、||、<和> 操作符能够正常存在于[[]]条件判断结构中,但是如果出现在[]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不使用双括号, 则为if [ $a != 1] && [ $a != 2 ]或者if [ $a != 1 -a $a != 2 ]
[[]]支持字符串的模式匹配,[]不支持。使用=或==进行字符串比较,等号右边的可以作为一个模式,比如[[ "hello" == hell? ]]为真。模式匹配不能加引号,否则会作为固定字符串,如[[ "hello" == "hell?" ]]为假。
[[]]支持算术扩展,而[]不支持。如if [[ 1+2 -eq 3 ]],而if [ 1+2 -eq 3 ]则会报错。
返回状态码
bash把[[]]中的表达式看作一个单独的元素,并返回一个退出状态码。
单大括号{}
字符扩展
for i in {0,2};do echo $i;done
输出0 2
for i in {0..2};do echo $i;done
输出0 1 2
命令组
{}与()都可以执行一连串命令,区别如下:
()会新开一个子进程,括号内命令与括号外无关。{}内的命令不会新开一个子进程运行,即脚本余下部分仍可使用括号内变量。
两者括号内的命令间都要用;隔开,但()最后一个命令的分号可有可无,但{}最后一个也必须有分号。
{}的第一个命令和左括号{之间必须要有一个空格(右括号}无此要求),而()两个括号的空格均可有可无。
字符串粘贴
${var}_hello
链接https://blog.csdn.net/m0_47219942/article/details/107442691

浙公网安备 33010602011771号