双引号
会使文本以字符的形式展示,会过滤部分扩展,但是参数扩展,算数扩展和命令替换依然有效($,``,\)
单引号
抑制所有的扩展
反斜杠
转义字符,可以限制一些双引号中的扩展
实例1:
变量嵌套:可以通过抑制外层的扩展和eval命令实现
[portal@ccodtk test]$ cat test1.sh #!/bin/bashset -xueo pipefaila_config="{a1,a2}"app1_config=\${${1}_config}echo $app1_configeval app_config=\${${1}_config}echo $app_config--------------------------[portal@ccodtk test]$ bash test1.sh a+ a_config='{a1,a2}'+ app1_config='${a_config}'+ echo '${a_config}'${a_config}+ eval 'app_config=${a_config}'++ app_config='{a1,a2}'+ echo '{a1,a2}'{a1,a2}
分析:
对于变量app1_config
外层增加了转移字符后,以指了外层的扩展,从而实现了使app1_config
的内容为一个变量形式的内容通过命令eval,是这个文本形式的变量内容得到bash的解析,从而展现出最后的内容
实例2:
单引号的抑制所有的转移,双引号不抑制参数扩展的转移
[root@qcteam-ciserver resources]# echo $USERroot[root@qcteam-ciserver resources]# pwd/home/docker/Cubes/dcmsSecurity/src/main/resources[root@qcteam-ciserver resources]# ssh portal@10.130.25.80 'pwd; echo $USER'/home/portalportal[root@qcteam-ciserver resources]# ssh portal@10.130.25.80 "pwd; echo $USER"/home/portalroot[root@qcteam-ciserver resources]# ssh portal@10.130.25.80 "pwd; echo \$USER"/home/portalportal
分析:
通过前两步可看到当前环境的信息;第三步展示的是单引号的抑制扩展功能,将引号内的所有内容原原本本的传递过去;第四步展示了双引号的不一致参数扩展的功能,$USER
在传递之前已经被解析为当前用户的值第五步展示了反斜杠在双引号中的抑制扩展功能