shell中各种括号的作用和区别

1、命令替换

在这里插入图片描述
他俩在使用上是一样的,但是``的可移植性更强。

2、变量替换

${ } 用于变量替换。一般情况下,$var${var} 并没有什么不一样,但是用 ${ } 会比较精确的界定变量名称的范围。

3、增强版的模式匹配

先记在这,没见过怎么用。到时候用到了再查。
# 是去掉左边(在键盘上#$之左边)
% 是去掉右边(在键盘上%$之右边)
#%中的单一符号是最小匹配,两个相同符号是最大匹配。

${variable#pattern}:shell在variable中查找,看它是否以给定的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式

${variable##pattern}:shell在variable中查找,看它是否以给定的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最长的匹配模式

${variable%pattern}:shell在variable中查找,看它是否以给定的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式

${variable%%pattern}:shell在variable中查找,看它是否以给定的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%%%###才有区别。结构中的pattern支持通配符*表示零个或多个任意字符?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。

4、数学运算

$[] 和 $(()) 还有`expr $a + $b`

$[]$(())还有expr那个是一样的,都是进行数学运算的。支持+ - * / %(“加、减、乘、除、取模”)。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。
实例:

a=5
b=7
c=2
echo $((a+b*c))
echo $(((a+b)/c))
echo $(((a*b)%c))

输出:

19
6
1

$(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用,如:
$(( $a + $b * $c)) 也可得到 19 的结果
此外,$(( )) 还可作不同进位(如二进制、八进位、十六进制)运算,只是,输出结果皆为十进制而已:
echo $((16#2a)) 结果为 42 (16进制转10进制)

5、test命令的另一种形式

[ ] 

[]test命令的另一种形式,但要注意:
1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
2.大于符号或小于符号必须要转义,否则会被理解成重定向。

6、可以用类似于其他语言的比较运算符的情况

(( ))及[[ ]] 

分别是()[ ]的针对数学比较表达式和字符串表达式的加强版。
其中
[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:
在这里插入图片描述
实例:

a=1
b=2
if (($a == $b))
then
	echo "相等"
else
	echo "不等"
fi

if (($a <= $b))
then
	echo "正确"
else
	echo "错误"
fi

输出:

不等
正确

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/89154304
今日推荐