51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1776|回复: 2
打印 上一主题 下一主题

Linux中shell脚本``和 $()的异同

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-25 15:40:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
相同点:

命令代换:

       在shell脚本中倒引号和$()都可以完成命令代换,即将对倒引号或$()里的内容先进行执行,然后将执行的结果代换到当前命令中。

例:定义一个变量存date命令的输出

DATE=`date`   等价于    DATE=$(date)

这两条命令的都是先执行倒引号或$()中的data命令,即查询当前时间。然后将查询到的结果存入DATE变量中。

不同点:

      1、$()并不是在每一种shell中都可以使用,在bash版本中肯定可以使用,但是倒引号对每一个版本都支持 。

      2、倒引号和$()的不同点主要在对转义字符反斜杠‘\’的解释上,具体区别我们以示例来分析:



      我先在任意目录下创建一个test.sh的脚本,编写内容如下 :

第一个版本:

我们都知道echo $SHELL命令是查询shell环境变量的。上面脚本执行的结果如下图:

由上面的执行结果我们可以得出两个结论:

      1)倒引号里面的转义字符并没有转义成功$符号,所以该转义字符没有意义。

      2)$()中的转义字符将$符号进行转义为普通字符,所以没有取到SHELL的值。


第二个版本:

执行脚本得到的结果:

由第二个版本执行结果可以得出:

       1)倒引号中的两个相连的转义字符可以将$符号转义成普通字符。

       2)$()中两个连续的转义字符可以输出一个反斜杠,即转义字符本身的含义与应用(第一个转义字符将第二个恢复成反斜杠本身的意义)。


第三个版本:

第三个版本的运行结果:

由第三个版本执行结果可以得出:


       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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 05:02 , Processed in 0.063912 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表