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
输出:
不等
正确