http://fightfxj.blog.163.com/blog/static/67683924200921111260641/
1,单引号
shell会保留单引号中任何特殊字符,即使是回车键,也会保留,不会解释$
例如:
$file=/root/more/file
$echo $file
/root/more/file
$echo '$file'
$file
如果变量有单引号中的*,会解释单引号中的*,用当前目录下的所有文件替换*
例如:
$text='* is all files'
$echo $text
会显示所有文件 is all files
2,双引号
$x=*
$echo $x
所有文件 #解释为特殊意义的字符*
$echo '$x'
$x #保持单引号中的内容不变
$echo "$x"
* #用变量的值替换变量的名称
上例可以看出无引号、单引号、双引号的区别。
双引号中不做文件名替换,如果想替换变量的值,又不希望shell把替换的内容作为特殊字符对待,就要用双引号。
3,反斜杠
反斜杠等价于在一个字符前后加上单引号,就是所谓的转义
$x=*
$echo \$x
$x
上例中,shell忽略反斜杠后的$,结果不作变量替换
用反斜杠续行:shell把行尾的反斜杠作为续行
双引号中的反斜杠:可以在双引号中用反斜杠去掉字符的特殊意义
4,$(...)结构
$(command)
命令替换结构,会将命令执行的结果替换这个结构
5,expr命令
expr可以识别+,-,/, *, %运算
对于*,需要用反斜杠,或者双引号,避免shell当做目录中的所有文件
例如:
$expr "17 * 6"
$i=1
$i=$(expr $i + 1) # 给i加1
$echo $i
2