您的位置:首页 > 运维架构 > Shell

[linux device driver] Chapter 03:以scull_load为例,讲解bash中反单引号`、双引号等的作用

2015-03-20 18:08 399 查看
在bash中,$、*、?、[、]、’、”、`、\、有特殊的含义。类似于编译器的预编译过程,bash在扫描命令行的过程中,会在文本层次上,优先解释所有的特殊字符,之后对转换完成的新命令行,进行内核的系统调用。

其中,反引号类似于函数调用,而不仅仅是简单的文本替换及匹配。

命令行中,被单引号引用的部分,其中所有的特殊字符按照普通字符解释;

双引号引用的部分,仅解释$(美元符号)、\(\n \t除外)、`(反引号,命令替换符),解释后的文本仅按照普通文字处理(同单引号)。

反引号相当于命令替换,引用的部分优先执行,将运行结果替换到外层的命令行文本中;反引号可以嵌套,但是嵌套时内部的反引号必须用\转义

反斜杠用于命令换行,以及echo -e解释。

比如:

# x=*

# echo $x      此行执行了两次替换,将$x替换为*,之后将*替换为当前目录下所有文件列表的文本,

          该文本作为参数赋给echo(bash会自动按照优先级,进行多层次替换


hello.sh menus.sh misc.sh phonebook tshift.sh

# echo '$x' $x不进行任何解释,直接将文本‘$x’作为参数赋给echo

$x

# echo "$x" $x替换为*,但是由于在双引号内,*不做替换,因此文本“*”将作为参数赋给echo *
下面详解反引号(命令替换符):

在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:

echo `ls`

会先执行 ls 得到xx.sh等,再替换原命令为:

echo xx.sh

最后执行结果为

xx.sh

虽然不少系统工程师在使用替换功能时,喜欢使用反引号将命令括起来。但是根据POSIX规范,要求系统工程师采用的是$(命令)的形式。所以,我们最好还是遵循这个规范,少用``,多用$()

建议所有在shell中使用反单引号执行bash命令的脚本统一使用$()进行替换 如:echo `ls` 替换为 echo $(ls)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: