一、单引号和双引号
首先,单引号和双引号,都是为了解决中间有空格的问题。
因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`。
所以下面的结果:
num=3
echo ‘$num’
$num
echo “$num”
3
所以,如果需要在双引号””里面使用这两种符号,需要用反斜杠转义。
二、反引号``
这个东西的用法,我百度了一下,和$()是一样的。在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:echo `ls`
会先执行 ls 得到xx.sh等,再替换原命令为:
echo xx.sh
最后执行结果为
xx.sh
那么,平时我们遇到的把一堆命令的执行结果输出到一个变量中,需要用这个命令替换符括起来,也就可以理解了。
这里又涉及到了一个问题,虽然不少系统工程师在使用替换功能时,喜欢使用反引号将命令括起来。但是根据POSIX规范,要求系统工程师采用的是$(命令)的形式。所以,我们最好还是遵循这个规范,少用``,多用$()
三. Shell变量赋值=左右两边必须没有空格 四\ $* 将命令行上所有的参数当做单个单词保存 $@将命令行上所有的参数当做同一字符串中的多个独立的单词 $#代表命令行运行参数个数 如果要代表最后一个参数不能用${$#}而必须用!替代 ${!#} $0代表函数名第一个参数是$1 eg ./test.sh rich barbara katie jesscia $* 输出 rich barbara jesscia $@输出 rich barbara jesscia $#输出3 $0输出test.sh 五\ Shell中反引号(`)与$()用法的区别在测试下面脚本内容时,我们发现它们的输出内容不同,这样就引发了一个问题:反引号(`)与$()用法有区别吗?
- echo `echo \\\\ `
- echo $(echo \\\\ )
![]()
将脚本内容修法改为8个反斜杠(\):
- echo `echo \\\\\\\\`
- echo $(echo \\\\\\\\ )
![]()
由此,我们可以得出结论:
1.反引号齐本身就对\进行了转义,保留了齐本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。所以我们可以简单的想象成反引号中: \\ = \;2. $()中则不需要考虑\的问题,与我们平常使用的一样:\ = \.