双引号和单引号在linux 中有着广泛的应用
例如变量赋值,echo 输出 等
那这两个的区别 可以理解为
单引号无法转义,双引号可以进行转义
例1
echo `expr length "$str"`
这里就不能使用双引号
例2
当进行ssh传输时
a=1
ssh myserver "echo $a" # 输出 1
ssh myserver 'echo $a' # 输出空白
由于双引号会进行转义,因此会导致还没有传输到目标服务器就将a变量替换为值,从而输出1,
单引号传过去的是echo $a,由于在服务器端a变量并没有定义,因此输出空白
例3
某些区别没有明显转义的地方
如下比较,二者可以混用
(1)特殊字符括起来
echo `expr $a '>=' $b`
echo `expr $a ">=" $b`
(2) 含有空格的名字
mkdir "my dir"
mkdir 'my dir'
输出均是 创建’my dir ‘的文件夹
嵌套使用
当遇到变量名有空格时,可能需要嵌套使用引号 或转义引号(这里不做讨论 方法: " )
引号是就近两两配对的,因此不存在双引号嵌套双引号,同理单引号也如此。
那就剩下两个组合。均是按照最外层的引号类型理解即可
1、单引号里有双引号
$等特殊符号无法识别
2、双引号里有单引号
$等特殊符号可以正常识别
几个个注意事项
1、
引号和双引号并不会使~/ 这个家目录求值,只有在不加引号时会被linux识别为家目录
因此:
echo '~/' # 输出~/
echo "~/" # 输出~/
echo ~/ # 输出家目录
2、不加引号多数情况下会被linux按照自己的规则进行使用 导致的原因是空格。空格是非常强大的分隔符号,因此需要额外注意。
其余不加引号情况与双引号一致。