由上面的执行结果我们可以得出两个结论:
1)倒引号里面的转义字符并没有转义成功$符号,所以该转义字符没有意义。
2)$()中的转义字符将$符号进行转义为普通字符,所以没有取到SHELL的值。
第二个版本:
[attach]122248[/attach]
执行脚本得到的结果:
[attach]122249[/attach]
由第二个版本执行结果可以得出:
1)倒引号中的两个相连的转义字符可以将$符号转义成普通字符。
2)$()中两个连续的转义字符可以输出一个反斜杠,即转义字符本身的含义与应用(第一个转义字符将第二个恢复成反斜杠本身的意义)。
第三个版本:
[attach]122250[/attach]
第三个版本的运行结果:
[attach]122251[/attach]
由第三个版本执行结果可以得出:
1)倒引号中连续的四个转义字符可以输出一个反斜杠。
2)$()中连续的四个转义字符可以输出两个反斜杠,即第一个将第二个转移为本身的反斜杠、第三个将第四个转义成本身的反斜杠。
总结:
由以上三个示例并结合转义字符本身的含义
1、可以瞬间理解$()中转义字符的应用,即$()中每一个转义字符就是转义字符的含义。
2、倒引号中转义字符为一个时无意义,两个连续的转义字符可以起到一个转义字符的意义。即倒引号对倒引号本身进行的转义,保留了其本身的意义。
所以在使用时:倒引号中\\ = \;一般成对使用。
$()中\ = \;即正常转义字符的用法。
倒引号是老的用法,$()是新的用法,推荐使用&()。
eval命令:
该命令适用于一次扫描无法完成其功能的变量。eval命令对变量进行两次扫描。
第一步:对eval后面的命令行进行扫描,执行变量替换(类似于C语言的宏替换),普通命令则保留。
第二步:执行变量替换后的命令串。
例1:
val='cat test.c'
echo $val
结果:打印出 cat test.c 不能得到真正想得到的test.c文件里的内容。
例2:
val='cat test.c'
eval $val
结果:打印出 test.c文件中存放的内容
该结果分两步执行:1)eval对val的内容进行扫描由于cat不是普通命令,则将cat test.c替换为test.c文件的内容。
2)对替换后的命令串执行,即相当于echo test.c文件的内容。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) | Powered by Discuz! X3.2 |