linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别

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

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

`command `

$(command)

${command}

$(){command}

Part 1 : command

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

缺点一:比较陈旧。

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

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

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

linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别_第1张图片

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

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

linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别_第2张图片

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

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

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

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

Part 2 : $(command)

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

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

Part 3 : ${command}

linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别_第3张图片

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

linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别_第4张图片

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

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

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

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

06d3ed743af788c680cf4449d8fc8f19.png

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

Part 4 : $(){command}

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

linux 脚本 替换,Linux 下Shell 脚本几种基本命令替换区别_第5张图片

结论:$(){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脚本执行jar文件

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

linux下shell脚本学习

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

Linux下Shell脚本字符串单引号、双引号、反引号、反斜杠的作用和区别

一.单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行) ...

linux下shell脚本启动jar包

本文采用的jar包是通过idea下maven打包的springboot项目. 写这个shell脚本是为了在linux下方便启动jar包时不用输入太多的shell命令,将启动脚本的一系列shell命令整 ...

Linux下Shell脚本运行程序不输出日志到终端

使用: 脚本路径/脚本名 >/dev/>& 说明: 可以简单的理解/dev/null是Linux下的回收站 >默认是把标准输出重定向 2>&1是把出错输出也定向 ...

Linux下shell脚本实现mongodb定时自动备份

MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...

linux下shell 脚本 中windows换行符换成linux换行符

sed -i 's/\r//' filename window下默认是 \r\n linux下是\n unix下是\r

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

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

Linux下Shell脚本替换换行符(转)

说明:过滤换行符确实有点吭,不是那么好弄.处理文本时需要将换行符替换为空格,若使用sed命令会比较麻烦,而使用tr命令非常方便. 输入文本(country.txt) China America Fra ...

随机推荐

由于目标计算机积极拒绝,无法连接。 192.168.1.106:8078 说明: 执行当前 Web 请求期间,出现未经处理的异常。

请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Net.Sockets.SocketException: 由于目标计算机积极拒绝,无法连接. 1 ...

Unity3d + NGUI 多分辨率适应

更多型号适合的移动终端 现在我们要介绍的游戏改编方法,这种适应方法UI这是一个基本维度,背景是一个基本的尺寸.背景比UI没有实际影响某一部分的额外部分,这样就避免了适应iPhon ...

SQL常用函数

SQL中常用的函数有类型转换函数.字符串函数和日期使用函数.更多具体的函数用法参见DBMS中的帮助文档. 类型转换函数 cast(值 as 类型) update 表名 set 列1=列1+cast(列 ...

AWVS介绍(转)

使用AWVS对域名进行全局分析,深入探索: 首先,介绍一下AWVS这个工具. Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网 ...

margin

...

CSS3属性——“box-flex”

CSS3的新增属性有很多,其中有一个比较神奇的,通常称为盒子模型布局,不需要把div浮动,也能合理分配.看如下例子: HTML:

< ...

js 面向对象 继承

继承方式有四种: 1.call 2.apply 3.prototype 4.for in call 和 apply 的主要区别: call 传参数只能一个一个的传, apply 因为是用数组,所以可以 ...

【Eclipse】-NO.163.Eclipse.1 -【Eclipse springboot 1.x 创建maven工程初始化报错】

Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

showMem.c setMem.c 及其改进

#ifndef MEMUTIL_H_INCLUDED #define MEMUTIL_H_INCLUDED // Show memory void showMem(void *, unsigned); ...

决策树原理实例(python代码实现)

决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种.看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉“亲切”许多. ...

你可能感兴趣的:(linux,脚本,替换)