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

posted @ 2023-01-29 16:04  心比天高xzh  阅读(61)  评论(0)    收藏  举报