Shell 脚本几种基本命令替换区别

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

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

Part 1 : command

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

缺点一:比较陈旧。

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

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

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

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

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

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

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

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

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

Part 2 : $(command)

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

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

Part 3 : ${command}

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

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

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

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

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

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

Part 4 : $(){command}

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

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

最后结文:

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

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

命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。

可移植操作系统接口(英语:Portable Operating System Interface of UNIX,缩写为POSIX),是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。

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

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

Linux 下Shell 脚本几种基本命令替换区别的更多相关文章

  1. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

  2. linux下shell脚本学习

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  3. 转:linux执行shell脚本的方式及一些区别

    假设shell脚本文件为hello.sh放在/root目录下.下面介绍几种在终端执行shell脚本的方法: [root@localhost home]# cd /root/ [root@localho ...

  4. Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段

    该脚本主要的目的是练习在Linux bash脚本中捕获信号,顺便练习一下函数的使用,还有就是终止一个正在运行的程序后,该程序打开的文件的后续处理问题等等!脚本功能:  ping一个网段内的IP,检测哪 ...

  5. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  6. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  7. Linux常用Shell脚本珍藏【转载】

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  8. 06 Linux下Shell介绍

    一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...

  9. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

随机推荐

  1. import renumber.py in pymol

    cp renumber.py /usr/local/lib/python2.7/dist-packages/pymol import renumber or run /path/to/renumber ...

  2. hdu 1878

    http://acm.hdu.edu.cn/showproblem.php?pid=1878 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...

  3. jenkins配置

    自动化测试机器172,27.14.22   IP 一.jenkins要先登录——>点击JCF_Automation——>点击左边配置 二.环境变量赋值就不会把进程杀掉

  4. jQuery on 绑定的事件触发多次

    jquery用on绑定事件,在代码执行过程中,可能会遇到多次执行的情况. 解决方案是在on的事件前面加上一个off,再on. $('#btnBind').off('click').on('click' ...

  5. JS中数组去除重复的方法

    function unique(arr) { var result = [], hash = []; for (var i = 0, elem; (elem = arr[i]) != null; i+ ...

  6. 自定义控件之 RadioList

    var RadioListObj = function (id, url) { this.URL = url;//radiobox source URL this.ID = id;//radioLis ...

  7. hadoop面试时的一些问题解答

    一.         linux部分 请阐述swap分区作用,您认为hadoop集群中的linux是否必须有swap分区? 答:在Linux中,如果一个进程的内存空间不足,那么,它会将内存中的部分数据 ...

  8. XCOJ 1102 (树形DP+背包)

    题目链接: http://xcacm.hfut.edu.cn/oj/problem.php?id=1102 题目大意:树上取点.父亲出现了,其儿子包括孙子...都不能出现.给定预算,问最大值. 解题思 ...

  9. COJ990 WZJ的数据结构(负十)

    DFS序(带入栈出栈标记): 对于一个节点,我们用L[i]和R[i]表示它入栈和出栈的时间.这样[L[i],R[i]]就表示了以i为根的区间. 我们还要将入栈的符号为+,出栈的符号为-,那么令V[i] ...

  10. 一步一步使用sklearn

    http://kukuruku.co/hub/python/introduction-to-machine-learning-with-python-andscikit-learn Hello, %u ...