1 $()和 ` `
1.1 在 bash shell 中,$( ) 与` ` (反引号) 都可用做命令替换用
e.g
var=`ls -l | wc -l`
echo $var
var1=$(ls -l | wc -l)
echo $var1
1.2 各自的优缺点:
` ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高,但反单引号容易打错或看错。
$()并不是所有shell都支持。
2 ${ }
2.1 ${ }用于变量替换。一般情况下,$var 与${var} 并没有什么不一样,但是用 ${ } 会比较精确的界定变量名称的范围
e.g
A=B
echo $AB
echo ${A}B
2.2 ${ }的模式匹配功能:
# 是去掉左边(在键盘上#在$之左边)
% 是去掉右边(在键盘上%在$之右边)
#和%中的单一符号是最小匹配,两个相同符号是最大匹配。
${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=abcabdab
echo ${variable#ab}
echo ${variable##ab}
echo ${variable%ab}
echo ${variable%%ab}
3 $[] $(())
3.1 $[]和$(())是一样的,都是进行数学运算的。支持+ - * / %(“加、减、乘、除、取模”)。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。
e.g
echo $((1+2*3))
echo $((5/2))
echo $((5%3))
echo $((1.2+3.5))
4 [ ]
为test命令的另一种形式,但要注意:
1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。
3.大于符号或小于符号必须要转义,否则会被理解成重定向。
e.g
a=1
b=2
if [ $a == $b ]; then
echo true
elif [ $a \< $b ]; then
echo a is litle than b
else
echo false
fi
5 (( ))及[[ ]]
5.1 分别是[ ]的针对数学比较表达式和字符串表达式的加强版
[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:
5.2 e.g
a=1
b=2
if (($a == $b)); then
echo true
elif (($a < $b)); then
echo a is litle than b
else
echo false
fi
a='ss'
b='ss'
if [[ $a == $b ]]; then
echo true
elif [[ $a < $b ]]; then
echo a is litle than b
else
echo false
fi