您现在的位置:圣剑网 >> 文章频道 >> 网络技术 >> 正文
Linux下Shell脚本几种基本命令替换区别
新闻来源:文章频道发布时间:2016-10-25 14:02我有话说(0)

前言:因为工作需要,需要编写 shell script 。编写大量 shell script 时,累计了大量经验,也让自己开始迷糊几种函数输出调用的区别。后面和 LinuxCN 前辈们请教了一下这个问题,大致明白了区别。这里分享给大家,希望对大家能有所收获。


`command ` $(command) ${command} $(){command}

Part 1 : ` command `

这是 “命令标准输出作为函数标准输入” 操作方法之一,有很大的弊端以及不安全的地方。


缺点一:比较陈旧。


缺点二:容易与单引号混淆。(其实它是你键盘“!”左边那个键)


Part 1.5 ` command``与 $(command) 俩者区别

直接看几张图吧,看这图解释他们区别...

图1.png

大家可以看到俩种表达方式,分别是代表命令直接执行和嵌套执行。

我们发现:执行`` 和 $() 是相同的。

图2.png

附,其实这里有个小bug...( 橙色框框 ):即你怎么知道嵌套执行计算机是真的镶嵌执行的呢?


所以我又截图一张...可以看到直接执行的情况下计算机确实是按照从左到右这样执行的。


所以得出证明,嵌套执行计算机是真的镶嵌执行,我们操作是确实有效的!


他们支持多层嵌套,对运维工作有不可言语的巨大作用。


Part 2 : $(command)

这是 “命令标准输出作为函数标准输入” 操作方法之二,使用这种方法的人也最多!


这种方法的优点是:以$(command)形式可以互相嵌套多个命令扩展。


Part 3 : ${command}

图3.png

那具体是什么意思呢?简而言之,将变量函数$()进行替换以\${}输出

图4.png

嗯...意思是到了但是还不正确。。但是我们现在知道俩点关于${}了


第一点:$() 是用来运行命令的,不是用来运行替换变量的。简而言之,\$()就是用来执行命令,其他干不了


第二点:${} 是用来替换变量的。但是它不能给你执行变量替换,仅仅能帮\$()信息读出来。


第三点:echo ${#name} 可以统计替换变量长度单位。

图5.png

结论:$()用来执行;\${}用来变量替换,但不能执行。


Part 4 : $(){command}

关于这点,可以看博主上篇文章的 Shell 脚本

图6.png

结论:$(){command}定义了个方法名叫\$,这个方法执行了command命令


最后结文:

` command``与 $(command) 俩者无区别,都是执行命令。“命令标准输出作为函数标准输入”


\${command} 与 $(){command} 俩者类似。前者用来读取变量替换内容,但不能执行。


唔...加一点话。群里的朋友给我提供了一份RHCE的官方手册,上面对“命令标准输出作为函数标准输入”有一个简单的解释,即:命令替换。


命令替换允许命令的输出替换命令本身。当命令包含前导美元符号和括号$(command)或者反引号 command时,就会发生命令替换。

网友评论

关于圣剑 - 广告服务 - 招聘信息 - 友情连接 - 保护隐私权 - 意见反馈 - 帮助中心 - 联系我们

Copyright © 2016 Sjian.Net Inc. All Rights Reserved.大千网络科技有限公司 版权所有

不良信息举报中心 陕ICP备10005927号 陕公网安备61010402000003号